临床试验生成Table时,不管是频数统计,还是描述性统计,有一些Table是需要输出汇总组的。
这篇文章介绍2种创建汇总组的方法,一种是Data步中Output
语句;另一种,Format过程步中的Multilabel
选项。
推荐大家尝试第二种方法。
代码举例,参考之前的文章,SAS编程:频数汇总时,如何使分组类别按固定顺序展示?。
方法1:Data步中Output
语句输出汇总组
这个应该是大家常用的输出方法,将分析数据集的所有观测output2次,第2次的分组变量命名为Total组,这样就创建了一个符合分析要求的汇总试验组。
在示例代码中,为Sex变量创建一个新的分组,sex = "Total"
:
**Get data from sashelp.class;
data class;
length sex $5;
set sashelp.class;
*Create count flag;
flag = 1;
output;
*Create Total;
sex = "Total";
output;
run;
**Set format for class var;
proc format;
value $sex (notsorted)
"M"="Male"
"F"="Female"
"Total"="Total"
;
run;
**Get count;
proc means data = class nway completetypes;
class sex/ preloadfmt order = data;
var flag;
output n=count out = result1;
format sex $sex.;
run;
从结果中看,正常输出汇总组。同时,输出的顺序为Format中定义好的顺序。
方法2:Format过程步中的Multilabel
选项输出汇总组
Multilabel
是Format过程步中Value语句的选项,照字面讲,就是多重标签的含义,该选项可以为变量值赋多个标签。具体语法说明,可以查看SAS官方文档:SAS Help Center: Syntax: PROC FORMAT VALUE Statement。
利用这一点,我们可以直接在Format的过程步中进行创建汇总组:
**Set format for class var;
proc format;
value $sex (notsorted multilabel)
"M"="Male"
"F"="Female"
"M","F"="Total"
;
run;
SAS中支持多重标签的过程步只有三个,PROC MEANS, PROC SUMMARY和PROC TABULATE。我们可以在这三个过程步中,在提前设置Class变量格式时,使用mlf
调用定义好的多重标签,实现汇总组的输出。
**Set format for class var;
proc format;
value $sex (notsorted multilabel)
"M"="Male"
"F"="Female"
"M","F"="Total"
;
run;
**Get data from sashelp.class;
data class;
length sex $5;
set sashelp.class;
*Create count flag;
flag = 1;
run;
**Get count;
proc means data = class nway completetypes;
class sex/ preloadfmt mlf order = data;
var flag;
output n=count out = result2;
format sex $sex.;
run;
可能大家觉得,这个跟Output语句相比,Multilabel
选项也没有简化多少步骤。最直接的改变,是将分析数据集的记录数减少一半,提高程序的运行效率;其次,在处理多个试验汇总组或多个变量汇总时,更加直观。
例如,有多个试验汇总组的情况:
proc format;
value trt (notsorted multilabel)
1, 3, 5 = "Total 1"
2, 4, 6 = "Total 2"
;
run;
例如,有多个变量汇总组的情况(文章开头图片):
proc format;
*Format for arnrind;
value $anrind(notsorted multilabel)
"Normal" = "Normal"
"Abnormal NCS" = "Abnormal Non-clinical Significant"
"Abnormal CS" = "Abnormal Clinical Significant"
"Normal", "Abnormal NCS", "Abnormal CS" = "Total"
;
*Display for group var;
value $bnrind(notsorted multilabel)
"Normal" = "1"
"Abnormal NCS" = "2"
"Abnormal CS" = "3"
"Normal", "Abnormal NCS", "Abnormal CS" = "4"
;
run;
第二个例子,多解释一下,计数输出的结果会进行Transpose(转置)。转置的ID变量为bnrind
,其变量值会成为转置后变量名的一部分,所有输出为数字更为方便。至于Header的显示内容,直接在Report过程步中设置。
总结
这篇文章介绍了生成Table时,2中创建汇总组的方法。推荐大家使用multilabel
选项,提高程序的运行效率。
感谢阅读!若有疑问,欢迎评论区交流!