前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS输出RTF精美排版背后的Code

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

作者头像
Setup
修改2019-10-22 10:50:18
9.9K0
修改2019-10-22 10:50:18
举报
文章被收录于专栏:SAS程序分享号号号

排版当从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''\i\tab\tab'||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)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 排版当从Template说起
  • RTF输出插入图片这是Logo
  • rtf标记语言控字体缩进等
  • 奥~Proc report还没说
  • 1.请看:
  • 2.请看:
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档