【问题标题】:PROC TABULATE with ALL and row percentage带有 ALL 和行百分比的 PROC TABULATE
【发布时间】:2021-08-17 18:31:31
【问题描述】:

我无法使用行百分比获得 ALL 行。我希望第一行给出列总计的总和和百分比。因此,ALL 边界下的百分比应显示 1861 * 100/5049=36.8%,而在希望下显示 1399 * 100/5049=27.7%。目前它显示 100%,我需要更改它。

proc tabulate data=sashelp.heart;* format=8.2;
 class chol_status smoking_status sex;
 table (all   smoking_status sex), 
    (all chol_status)*(n*f=8. colpctn) ;
run;

输出是

           All      Cholesterol Status 
                   Borderline Desirable  High  
         N ColPctN N ColPctN N ColPctN N ColPctN 
All     5049 100.00 1861 100.00 1399 100.00 1789 100.00  <- change the cholesterol % to denominator 5049

Smoking Status
Heavy (16-25)   1029 20.38 383 20.58 285 20.37 361 20.18 
Light (1-5)      563 11.15 192 10.32 174 12.44 197 11.01 
Moderate (6-15)  563 11.15 217 11.66 170 12.15 176 9.84 
Non-smoker      2436 48.25 886 47.61 655 46.82 895 50.03 
Very Heavy (> 25) 458 9.07 183 9.83 115 8.22 160 8.94
 
Sex 
Female 2770 54.86 959 51.53 803 57.40 1008 56.34 
Male   2279 45.14 902 48.47 596 42.60 781 43.66 

【问题讨论】:

  • 尝试将 ALL 移到单词后面? table ((smoking_status all) sex)
  • 它仍然给我 100% 的所有百分比。
  • 你能更清楚地解释你想要做什么吗?您需要多少百分比?
  • 我希望第一行给出列总数的总和和百分比。因此,ALL 边界下的百分比应显示为 1861*100/5049=36.8%,而在希望下显示为 1399*100/5049=27.7%。目前它显示 100%,我需要改变它。感谢 Reeza 的回复!
  • 换句话说,对于我想要 COLPCTN 的变量,对于第一行的通用 ALL,我需要 ROWPCTN。

标签: sas


【解决方案1】:

我认为你能得到的最接近的是:

proc tabulate data=sashelp.heart;* format=8.2;
 class chol_status smoking_status sex;
 table all*rowpctn=' '   (smoking_status sex)*(n=' '*f=8. colpctn=' '), 
    (all) (chol_status) ;
run;

不过,这不是您想要的,而且看起来也不是很好。这是来自proc tabulate 的唯一选项,因为 Tabulate 不允许您同时为行和列分配统计信息 - 您必须选择一个。

PROC REPORT 会做你想做的事,付出一些努力。但是,您也可以在两步过程中运行它 - 将表格输出到数据集,修复行百分比,然后在报表或制表中重新打印它,而不是要求它在那个时候对事物进行百分比。

【讨论】:

  • 谢谢乔!这正是我想要的。虽然结果显示在不同的行中。有没有办法让 n 和百分比值跨列显示 - 在线?我有 50 多个协变量,所以输出运行时间很长。
  • 不,我就是这么说的——你不能做影响列和行的单独统计数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多