一个多月前,小编写了一篇SAS-临床试验程序绘图合集(一),今天小编要写的是统计编程的另外一块,统计表格的制作。本来也想按照绘图合集的形式,按表格样式/类型写程序,然后分享。后来思考良久后,还是先决定写一下制表输出排版相关的小技巧,再来将各种类型的表格程序整理一下。
RTF
SAS表格的输出,基本上都是以RTF的形式进行的。小编历史文章也写过很多相关的推文。今天主要内容之一就是RTF排版控制,当然Tamplate这里先不介绍了。因为基本不用自己写Template,大家都与自己的模版,如果没有,下载本文代码,也就有了三线表的Template。今天要分享的是通过在数据集中插入代码,实现输出排版的控制。
代码
代码语言:javascript复制data class;
length Setup text desc $10000.;
text="Setup的测试";
setup=text;
desc="无插入";
output;
setup="(*ESC*)R/RTF'tab "||strip(text);*缩进多种方式:1;
desc="采用tab缩进";
output;
setup="(*ESC*)R/RTF'u32?u32?u32?u32? "||strip(text);*缩进多种方式:2;
desc="采用u32缩进";
output;
setup="(*ESC*)R/RTF'b "||strip(text);*字体加粗;
desc="采用b控制字体粗细";
output;
setup="(*ESC*)R/RTF'fs24 "||strip(text);*字体大小;
desc="采用fs控制字体大小";
output;
setup="setup (*ESC*)R/RTF'{fs32b ssss} "||strip(text);*利用{}控制文本局部变化;
desc="采用fs控制字体大小,利用{}控制文本局部变化";
output;
setup="setup (*ESC*)R/RTF'{sub ssss} "||strip(text);*上角标控制;
desc="采用sub控制角标";
output;
setup="22setup (*ESC*)R/RTF'{super 2} "||strip(text);*下角标控制;
desc="采用super";
output;
setup="setup (*ESC*)R/RTF'par "||strip(text);*文本换行;
desc="采用par文本换行";
output;
setup="setup (*ESC*)R/RTF'brdrbbrdrs "||strip(text);*下划线;
desc="采用brdrbbrdrs实现下划线";
output;
setup="(*ESC*){unicode '03bc'x}(*ESC*){unicode '006d'x}(*ESC*){unicode '006f'x}(*ESC*){unicode '006c'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '004c'x}";*特殊符号;
desc="Unicode 表达特殊符号";
output;
setup="(*ESC*){unicode '006b'x}(*ESC*){unicode '0067'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '006d'x}(*ESC*){unicode '00b2'x}";
desc="Unicode 表达特殊符号";
output;
setup="(*ESC*){unicode '0068'x}(*ESC*){unicode '0074'x}(*ESC*){unicode '0074'x}(*ESC*){unicode '0070'x}(*ESC*){unicode '0073'x}(*ESC*){unicode '003a'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '0077'x}(*ESC*){unicode '0077'x}(*ESC*){unicode '0077'x}(*ESC*){unicode '002e'x}(*ESC*){unicode '0073'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '0073'x}(*ESC*){unicode '002d'x}(*ESC*){unicode '0070'x}(*ESC*){unicode '0068'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '0072'x}(*ESC*){unicode '006d'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '002e'x}(*ESC*){unicode '0063'x}(*ESC*){unicode '006f'x}(*ESC*){unicode '006d'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '0073'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '0073'x}(*ESC*){unicode '002d'x}(*ESC*){unicode '0070'x}(*ESC*){unicode '0068'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '0072'x}(*ESC*){unicode '006d'x}(*ESC*){unicode '0061'x}(*ESC*){unicode '002f'x}(*ESC*){unicode '0075'x}(*ESC*){unicode '006e'x}(*ESC*){unicode '0069'x}(*ESC*){unicode '0063'x}(*ESC*){unicode '006f'x}(*ESC*){unicode '0064'x}(*ESC*){unicode '0065'x}(*ESC*){unicode '0063'x}(*ESC*){unicode '0068'x}(*ESC*){unicode '0067'x}(*ESC*){unicode '002e'x}(*ESC*){unicode '0070'x}(*ESC*){unicode '0068'x}(*ESC*){unicode '0070'x}";*特殊符号;
desc="Unicode 表达文本";
output;
run;
proc report data=class nowd headskip headline split='|' missing nocenter;
column setup desc ;
define setup / display "展现" style(header)=[just=left] style(column)=[just=left cellwidth=20% asis=on] flow;
define desc / display "描述" style(header)=[just=left] style(column)=[cellwidth=80% just=left asis=on] flow;
run;
效果
解释
日常编程中,常见的几种改变输出表格内容及排版的方式,如上代码部分,基本上每个参数都有注释,这里就不在介绍了。当然需要额外说明的是Unicode可以做很多事,在SAS或者输出中,一些特殊字符可能无法正确的展现在输出的RTF中,或者规避一些特殊字符影响程序等情况,我们可以将文本转化成Unicode编码后进行输出。如上部分,有相应Unicode的写法。
Unicode
那么问题来了,如何转化Unicode,各种符号/文本对应的Unicode编码怎么获取。为了解决这一问题,日前,小编的网站上线了Unicode编码在线转化功能。
如上图,在一个文本框输入需要转化的内容,点击UnicodeforRTF按钮即可实现在线生成用于RTF输出的Unicode编码,直接复制使用。如有需要,欢迎大家前往,下面为网站链接。
UnicodeforRTF:https://www.sas-pharma.com/sas-pharma/unicodechg.php
Pharma-tools:https://www.sas-pharma.com/
代码下载:点击原文或浏览网站此目录下