【问题标题】:How to use proc format for columns in SAS output如何对 SAS 输出中的列使用 proc 格式
【发布时间】:2025-12-18 00:15:04
【问题描述】:

我有以下数据

DATA HAVE;
input year dz $8. area;
cards;
2000 stroke 08
2000 stroke 06
2000 stroke 06
;
run;

使用 proc 制表后

proc tabulate data=have;
class area dz;
table area, dz*(n colpctn);
run;

我得到以下输出

我想分别用“

我有以下 proc 格式代码

 proc format;
picture count (round)
0-4 = ' <5' (NOEDIT);
picture pcnt (round)
0 = ' - '
other = '009.9%';

但我不明白如何在数据步骤中使用它来获得所需的结果。请指导。

谢谢!

【问题讨论】:

  • 为什么将 COUNT 定义为图片格式而不是仅仅定义普通的数字格式?
  • @Tom 这已经在我正在处理的代码中了。我假设图片格式用于 COUNT 和 PERCENT,因为它们不是数据集中的变量,而是输出中的一列。
  • 也许他们想将 4.6 舍入到 5 并将其显示为 5 而不是

标签: sas format


【解决方案1】:

在 SAS 9.4 中,您可以将格式应用于数据集,但 不能 应用于“输出”窗口的内容(您从中复制上表)。所以你应该首先将结果导出到一个单独的数据集中:

ods output Table=YourDsName;
proc tabulate data=have;
  /*your original code*/
run;

然后 - 正如你所说 - 在另一个数据步中格式化 YourDsName 数据集,或通过 proc print(如下例所示):

proc print data=YourDsName;
 format /*apply your formats here*/
run;

【讨论】:

    【解决方案2】:

    将格式应用为统计关键字的*f=&lt;format&gt; 交叉(在您的情况下为N)。因为单元格是数据中存在的分类值的交叉点(交叉点),所以您不会在 colpctn 中看到零,除非您使用 classdata= 来预先确定输出中应包含哪些交叉点。

    DATA HAVE;
    input year dz $8. area;
    cards;
    2000 stroke 08
    2000 stroke 06
    2000 stroke 06
    ;
    
    proc format;
      picture count (round)
        0-4 = ' <5' (NOEDIT);
      picture pcnt (round)
        0 = ' - '
        other = '009.9%';
    
    proc tabulate data=have;
    class area dz;
    table area, dz*(n*f=count. colpctn);
    /*               ^^^^^^^^^ format applied to N */
    run;
    

    【讨论】:

    • 谢谢@Richard!这可行,但是我想知道如何在 proc freq 中使用它,我尝试以这种方式使用它proc freq data=have; tables area * dz / list nocum (frequency=fcount. percent=pcnt.); run;。但它不起作用!
    • freq 和 tabulate 是不同的生物,因此它们的功能也不同。如果您想询问频率,请创建一个新问题。
    • @Richard 完成!检查*.com/questions/66878045/…