排版当从Template说起
Proc Template:简单举一例子(仅针对于RTF输出Table,写法很多仅以我常见写法之一为例)
代码语言:javascript复制proc template;
define style style_tb2;
parent = styles.rtf; /*SAS自带Style*/
replace fonts / ; /*定义字体*/
replace header / ; /*定义表头*/
replace table from output / ;/*定义表格线框*/
replace cell from output / ;/*定义单元格*/
style body from body / ;/*定义主题*/
end;
run;
参数说明
字体:/*字体的设置大致也就是这样(“字体名称”=(“字体”,大小,字体形式))*/
代码语言:javascript复制replace fonts /
"TitleFont2" = ("楷体",9pt)
"TitleFont" = ("楷体",9pt)
"StrongFont" = ("楷体",9pt,Bold)
"EmphasisFont" = ("楷体",9pt,Italic)
"FixedStrongFont" = ("楷体",9pt)
"FixedHeadingFont" = ("楷体",10pt)
"FixedEmphasisFont" = ("楷体",9pt,Italic)
"BatchFixedFont" = ("楷体",10pt)
"FixedFont" = ("楷体",9pt)
"headingEmphasisFont" = ("楷体",10pt,Bold Italic)
"headingFont" = ("楷体",10pt,Bold)
"docFont" = ("楷体",9pt);
定义表格线框:
代码语言:javascript复制replace Table from Output /
cellpadding = 0
cellspacing = 0
outputwidth = 100%
frame = HSIDES
rules=all
OUTPUTHEIGHT=1;
frame参数:
rules参数:
Proc template的设置只是排版的一步
远远没有达到精致排版的地步
这个时候需要使用一些rtf的标记语言(我的叫法)
RTF输出插入图片这是Logo
请看下方!输出RTF时在页眉/页脚加入logo(图片等),小编以前见识有限的时候以为SAS实现不了这个功能,自从发现自己是井底吱哇后,奋发图强天天逛官网,前不久get到的新技能。废话太多了,还是看下图。
图上效果如何实现的呢,请看下面Code~
代码语言:javascript复制/*Option选项取消SAS系统自带的输出参数设置,可能表达不太清楚*/
option nobyline nodate nonumber orientation="PORTRAIT" papersize=letter ;
*orientation: PORTRAIT/LANDSCAPE (Word纸张方向);
ods rtf file = "&path&date..rtf" wordstyle = '{s15 caption;}' style =style_tb2 startpage=no;
ods rtf exclude none;
ods escapechar='^';
title1 justify = left '^S={preimage="&path.SAS程序分享号号号.jpg"} ' justify = right 'Page ^{thispage} of ^{lastpage}';
footnote1 justify = right "Date/time of run : &date.&systime.";
核心代码:
代码语言:javascript复制title1 justify = left '^S={preimage="&path.SAS程序分享号号号.jpg"}
rtf标记语言控字体缩进等
在CSR的Table/list的shell中大部分都会固定表格的形状,需要SAS Programmer输出的Table一模一样。
请看下方!控制缩进和字体的倾斜
控制缩进和字体的倾斜
代码语言:javascript复制proc means data = sashelp.class ;
var WEIGHT;
class sex;
output out=cylinders sum = total ;
run;
data cylinders;
length Sex $40.;
set cylinders;
if missing(Sex) then Sex="性别(总数)";
if sex in ('男' '女') then do;
Sex='^R/RTF''itabtab'||left(sex)||strip("'");
end;
keep sex total;
run;
标记小全
在借用人大论坛里面的几张图来看排版的效果:
输出效果:(一切都是数据集中的RTF的标记起到的作用)
在看code:
小编解释一下分组后面的空白行是如何形成的:
在该数据集group变量就是衍生生成用来控制排版的, 将每一组观测赋值一个值,在通过proc report中的define /order order=internal noprint来排序并不输出改变量到报表中,但report过程还是可以对该变量进行操作,利用compute after group; line '#{newline}';endcomp;来实现在没一组观测后进行插入一行空白的操作.小编也没有试过‘#{newline}’,小编的写法的都是 line ' ' ;应该都可以实现同样的效果。
接下来,好吧要说的感觉都说了
奥~Proc report还没说
report中所有的参数几乎SAShelp都能有查到(大家有兴趣可以查阅SAShelp),下面是小编自己常用的Report过程步的写法,以及用到的参数的说明。
请看下方!
代码语言:javascript复制proc report data =cylinders nowd headline split ="|" missing nocenter headskip
style(report)={ pretext="outlinelevel3{All salary and compensation figures.}line" just=left font_size=10pt font_weight=medium }
style(header)={just=left asis=on } ;
column Sex total;
define Sex / display "Sex" style(header)=[just=center] style(column)=[cellwidth=30% just=center asis=on] flow;
define total / display "Weight" style(header)=[just=center] style(column)=[cellwidth=10% just=center asis=on] flow;
compute before _page_ / style = [just=left font_weight=medium font_size=9pt nobreakspace=off borderbottomcolor=black borderbottomwidth=.5 ];
line " ";
endcomp;
compute after _page_ / style = [just=left font_weight=medium font_size=7pt nobreakspace=off bordertopcolor=black bordertopwidth=.5pt];
line " ";
line "^R/RTF'tab'note:[1]This is Hwk";
endcomp;;
run;
report后面常见的option选项:
DATA 指定做报表的数据集
NOWINDOWS 不输出到结果
HEADLINE 在报表变量标题和内容间生成一个水平分隔线
HEADSKIP 在报表变量标题和内容间生成一行空格
1.请看:
代码语言:javascript复制style(report)={ pretext="outlinelevel3{All salary and compensation figures.}line" just=left font_size=10pt font_weight=medium }
style(header)={just=left asis=on } ;
style report:表报设置,pretext:设置标题(outlinelevel3)三级标题
style header:设置表头
2.请看:
代码语言:javascript复制style(header)=[just=center] style(column)=[cellwidth=10% just=center asis=on]
style(header):控制标头的排版(在每个变量define后,如果想修改表头的背景色,表头字体大小等等都可以在style(header)=[] 进行操作)
style(column):对表格的内容进行操作.
cellheight= 控制单元格高度
cellwidth= 控制单元格占宽
just= 控制单元格内容位置(C L R)
asis= on
From SAS HELP:
ASIS=ON - prints text with leading spaces and line breaks, in the same manner as the listing output.
font_size= 字体大小
font_weight=字体形状
foreground=字体颜色
background=背景颜色
font_face=字体
虽然很多都可以在Template中控制,但是Template也只是一个框架一个大体的模板,
如果需要做到精确细致的控制则还是在column与header里面控制。
后面参数很多,仅列常见的参数:
小编这儿就是说我自己常用的参数,
report中所有的参数几乎SAShelp都能有查到(大家有兴趣可以查阅SAShelp)