SAS输出RTF精美排版背后的Code

2019-10-22 10:50:18 浏览数 (1)

排版当从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)

0 人点赞