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

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

作者: 野藤_ | 来源:发表于2022-04-09 00:20 被阅读0次

    临床试验生成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)组如何处理?

          本文链接:https://www.haomeiwen.com/subject/cwaysrtx.html