SAS编程:生成Table时,汇总组(Total)组如何处理?

临床试验生成Table时,不管是频数统计,还是描述性统计,有一些Table是需要输出汇总组的。

Total

这篇文章介绍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;
Result 1

从结果中看,正常输出汇总组。同时,输出的顺序为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;
Result 2

可能大家觉得,这个跟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选项,提高程序的运行效率。

感谢阅读!若有疑问,欢迎评论区交流!

你可能感兴趣的:(SAS编程:生成Table时,汇总组(Total)组如何处理?)