草庐IT

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

野藤_ 2023-03-28 原文

临床试验生成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)组如何处理?的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  4. ruby-on-rails - Enumerator.new 如何处理已通过的 block ? - 2

    我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m

  5. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  6. ruby-on-rails - Ruby on Rails - 为文本区域和图片生成列 - 2

    我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数

  7. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  8. ruby-on-rails - 如何在 Rails 3 中创建自定义脚手架生成器? - 2

    有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我

  9. 报告回顾丨模型进化狂飙,DetectGPT能否识别最新模型生成结果? - 2

    导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri

  10. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

随机推荐