专栏首页SAS程序分享号号号SAS输出RTF精美排版背后的Code

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

排版当从Template说起

Proc Template:简单举一例子(仅针对于RTF输出Table,写法很多仅以我常见写法之一为例)

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;

参数说明

字体:/*字体的设置大致也就是这样(“字体名称”=(“字体”,大小,字体形式))*/

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);

定义表格线框:

replace Table from Output /   
cellpadding = 0                                                      
cellspacing = 0                                                     
outputwidth = 100%
frame = HSIDES
rules=all
OUTPUTHEIGHT=1;

frame参数:

rules参数:

Proc template的设置只是排版的一步

远远没有达到精致排版的地步

这个时候需要使用一些rtf的标记语言(我的叫法)

请看下方!输出RTF时在页眉/页脚加入logo(图片等),小编以前见识有限的时候以为SAS实现不了这个功能,自从发现自己是井底吱哇后,奋发图强天天逛官网,前不久get到的新技能。废话太多了,还是看下图。

图上效果如何实现的呢,请看下面Code~

/*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.";

核心代码:

title1 justify = left '^S={preimage="&path.\SAS程序分享号号号.jpg"} 

rtf标记语言控字体缩进等

在CSR的Table/list的shell中大部分都会固定表格的形状,需要SAS Programmer输出的Table一模一样。

请看下方!控制缩进和字体的倾斜

控制缩进和字体的倾斜

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过程步的写法,以及用到的参数的说明。

请看下方!

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.请看:

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.请看:

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)

本文分享自微信公众号 - SAS程序分享号号号(xiaocgn),作者:setup~

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ODS Output RTF(Table Listing)

    在SAS实际编程过程中经常会用到Ods 与report来输出table/listing

    Setup
  • SAS-输出文档生成目录的方法

    前段时间有一个需求,利用SAS实现文档目录的自动生成。这里小编没有限定文档的类型,是因为本文将分享两种类型文档(PDF/RTF)通过SAS自动生成目录的方法。

    Setup
  • SAS-函数(三),这几个函数你都知道吗~

    昨天最后的一个函数是Lag,那么今天的第一个函数是和昨天的lag很类似,Lag可以将前一条观测下移,然后求差值,那么今天这个函数是可以直接求上下观测的差值......

    Setup
  • 从SAP最佳业务实践看企业管理(70)-SOP-制造与生产

    制造与生产 制造与生产貌似是一样的,很多企业制造与生产隶属于同一个部门,但是制造与生产的关注点还是有区别的。 所谓制造,就是在确保品质的前提下,在生产现场对工作...

    SAP最佳业务实践
  • SAP最佳业务实践:重复制造(149)-1业务概览

    1、业务情景概览 用途 通常在生产流程符合下列标准时使用重复制造: 1、在较长期间生产相同或类似的产品。 2、不为所生产的产品单独定义生产批, 而是在某特...

    SAP最佳业务实践
  • 揭秘自编码器,一种捕捉数据最重要特征的神经网络(视频+代码)

    大数据文摘
  • 《精通CSS:高级Web标准解决方案》 知识点汇总

    本篇的内容到这里就全部结束了,常用的 CSS 样式重置文件我已经发到了 GitHub Reset.css,本篇文章知识点来源 精通CSS:高级Web标准解决方案...

    Nian糕
  • 短短几行代码将数据保存CSV和MySQL

    数据我就按比较常见的列表嵌套字典来演示了,这种数据结构也是在各个场景下经常用到的数据结构[{},{},{}…]

    Rare0716
  • 前端|纯JS实现碎片合成大图

    (1)将ul排列列表设置为3行5列,便于碎片小图片的排列;设置容器的宽度和高度,并且通过offsetWidth和offsetHeight来获取对象(自己)的宽和...

    算法与编程之美
  • CSS 鼠标悬停图片,显示隐藏文本

    我在 JavaScript 鼠标悬停图片,显示隐藏文本 这篇博文当中实现了同样的效果,只不过是通过 JS 来实现的,但其实,通过 CSS 动画也能实现同样的效果...

    Nian糕

扫码关注云+社区

领取腾讯云代金券