如何对 SAS 输出中的列使用 proc 格式

How to use proc format for columns in SAS output

我有以下数据

DATA HAVE;
input year dz . 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;

我得到以下输出

我想用“<5”和“0”分别替换“N”列中小于 5 和“ColPctN”列中小于 0 的任何值。

我有下面的 proc 格式代码

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

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

谢谢!

A​​FAIK 在 SAS 9.4 中,您可以将您的格式应用于数据集,但 不能 输出 window 的内容(这是您复制上述内容的地方 table 来自)。所以你应该首先将结果导出到一个单独的数据集中:

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

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

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

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

DATA HAVE;
input year dz . 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;