拙中藏巧混天成:统计表格
医药科研
- 基线信息表格:介绍人群基本情况
- 危险因素表格:会在表格中给出事件频数和百分比、粗的效应值及其95%CI和P值
- 结局效应表格:横款目为终点指标,纵款目除了分组信息,还有效应量
- 亚组分析表格:最重要的信息是需要提供交互作用校验的结果,通常以森林图的形式展示
统计汇总过程
一个统计过程中只能获得一种变量(分类、连续)的统计数据,款目形式不便统一。
- RTF(Rich Text File)可直接用Word打开编辑
- journal3a是最贴近三线表的样式
|
|
PROC TABULATE
能一次性实现多种变量的统计需求,也能比较灵活的组合表格形式,但是仍达不到标准三线表的要求,而且也无法计算统计量和P值。
- CLASS语句申明分类变量
- VAR语句申明分析变量
- TABLE语句设置表格形式,逗号“,”作为页、行、列等纬度的间隔符,星号“*”作为变量与其显示格式、统计关键字的关联符,括号“()”用来强制分组。
|
|
PROC REPORT
纵款目无法用分组变量,横款目值没有缩进,统计变量之间没有连字符,无法获得检验统计量和P值。
|
|
完美三线图
|
|
一缕檀烟万佛名:宏中奥秘
###宏
SAS宏由宏语言和宏处理器构成。宏语言是与宏处理器沟通的语言。宏语言中以&开头的是宏变量,以%开头的是SAS宏程序或宏函数。当SAS遇到&或%开头的宏语言时,便触发宏处理器,执行宏操作。
创建宏变量
- %LET语句
|
|
- %GLOBAL申明一个全局宏变量(无法赋值),既可以在宏程序内部,也可以在外部。
- %LOCAL申明一个局部宏变量(无法赋值),只能在宏程序内部。
- 确保宏程序内部定义的宏变量不会因为同名重写全局宏变量的值
- 确保宏程序执行完毕后,这些宏变量立即消逝
- SQL里SELECT语句的INTO从句,可产生一个或一系列宏变量
|
|
- DATA步的SYMPUT和SYMPUTX(去除首尾空格)语句。
|
|
- 宏程序的宏参数会创建局部宏变量
- %WINDOWS语句
- 宏程序中的%DO语句
- ODS OUTPUT语句的MATCH_ALL选项
宏符号表与作用域
宏符号表(Macro Symbol Table)存储着宏变量与其对应的值。
- 全局宏符号表,SAS启动时,系统自动创建,其中存储的内容有:
- 系统自带的宏变量和值
- open code(宏程序外)环境下,用%LET语句创建的宏变量
- 宏程序定义中,用%GLOBAL申明的宏变量
- DATA步中CALL SYMPUTX语句中申明了全局符号表
- PROC SQL中SELECT语句的INTO从句创建的宏变量
- 局部宏符号表,SAS执行宏程序时,系统自动创建,其中存储的内容有:
- 由宏程序的宏参数创建的宏变量
- 宏程序中由%LET定义的宏变量,且在全局宏变量中没有同名宏变量
- 宏程序中由%LOCAL定义的宏变量
- 判断是全局还是局部
- 采用%PUT语句的选项_USER_、_LOCAL_、_GLOBAL_查看符号表
- 采用系统自带的宏函数%SYMLOCAL、%SYMGLOBAL进行判定
|
|
掩蔽宏变量
掩蔽(masking):将符号当作普通的文本对待,不使用其特殊含义,有的文档也称为引用(quoting)。
- 需要掩蔽的符号:
- 运算符:如+ - * / < > = ¬ ^ ~ |
- 助记符:如 AND OR NOT EQ NE LE LT GE GT IN
- 其他:bank , ; “ “ ‘ ’ ( ) #
- 没有配对的符号,如 “ ‘ ( ),使用%B系列的函数掩蔽
- 宏触发器 & %,使用%NR系列的引用函数
- 移除掩蔽主要发生在程序编译后、程序运行后、%UNQUOTE函数后
显示宏变量值
- 系统选项SYMBOLGEN
- %PUT语句
|
|
引用宏变量
- 直接引用
如果是用宏变量给DATA步变量赋具体的值,需用引号引起来。
|
|
- 间接引用
SAS在解析时,会将两个连续的&&解析为一个&,然后再次进行解析,知道&全被解析完
|
|
- 合并宏变量与普通文本
宏变量后面带一个点号,用以标识宏变量的结束
|
|
宏程序定义与调用
%macro macro_name <parameter_list> </option(s)\>
<macro_text>
%mend <macro_name>;
%macro_name <parameter_list>
- macro_name:宏程序名称,需要符合SAS命名规范,不能以SYS、AF、DM开头,不能用SAS的保留字,以免冲突
- parameter_list:宏参数,通过宏程序定义的局部变量,便于在宏文本中应用。参数通过逗号隔开
- 位置宏参数:按位置顺序定义识别 <positional-parameter-1><, positional-parameter-2…>
- 关键字宏参数:按名字=识别 <keyword-parameter=<value> <, keyword-parameter-2=<value> …>>
- option(s):比如加密选项secure,存储选项store
- macro_text:宏文本是宏的主体,里面包括宏语句、DATA步语句、PROC语句等
- 宏参数不是必需的,位置宏参数和关键字宏参数可以混用,但位置宏参数必须在关键字宏参数前。
- 宏参数中如有特殊字符如&、%、不配对的括号或引号、其他运算符等,需要做好宏变量的掩蔽。
- %mend之后的宏程序名非必需。
- 调用宏程序时,末尾不需要分号结尾。
宏程序的存储加密
如果为了保护知识产权,想给他人使用宏程序但又不希望他人看到自己开发的宏程序源代码,可以将编译好的宏给别人,且设置为不显示宏的源代码。
|
|
%IF-%THEN-%ELSE选择语句
|
|
%DO组语句
|
|
%DO循环语句
|
|
%DO-%WHILE语句
|
|
%DO-%UNTIL语句
|
|
宏函数
类别 | 宏函数 | 作用 |
---|---|---|
字符宏函数 | %index | 返回字符串第一次出现的位置 |
%length | 返回字符串长度 | |
%scan %qscan | 按字符串中的位置截取单词 | |
%substr %qsubstr | 截取子字符串 | |
%upcase %qupcase | 转为大写字符 | |
计算函数 | %eval | 使用整数运算计算表达式结果 |
%sysevalf | 使用浮点运算计算表达式结果 | |
引用函数 | %str | 编译时掩蔽特殊字符及助记符 |
%nrstr | %str 外加宏触发器字符 | |
%quote | 执行时掩蔽特殊、助记、其他字符 | |
%nrquote | %quote 外加宏触发器字符 | |
%bquote | 执行时掩蔽特殊、助记、其他字符和没有配对的符号 | |
%nrbquote | %bquote 外加宏触发器字符 | |
%superq | 执行时掩蔽所有字符,且对结果保持 | |
%unquote | 执行时去掉所有特殊、助记字符的掩蔽 | |
SYS系函数 | %sysmacexect | 返回宏执行状态 |
%sysmacexist | 判断宏程序是否已经定义 | |
%sysmexecdepth | 返回宏嵌套的深度 | |
%sysmexecname | 返回指定宏嵌套的深度的宏名称 | |
%sysfunc %qsysfunc | 使用data步函数 | |
%sysget | 返回环境变量的值 | |
%sysprod | 判断SAS产品是否已经授权 | |
SYM系函数 | %symexist | 判断宏变量是否已经存在 |
%symglobl | 判断是否属于全局宏变量 | |
%symlocal | 判断是否属于局部宏变量 |
宏开发
- 硬代码实现:先不用任何宏代码,实现具体的任务
- 移除上一步中的硬代码,该用宏变量、宏参数,如有必要,增加宏语句如以及宏函数
- 宏代码测试优化:给宏变量赋值,逐步测试宏代码,优化宏代码。