使用Proc Report,如何将格式应用于从Across变量创建的列?

时间:2012-03-08 14:15:06

标签: sas

以下代码将为每个MAKE组提供TYPE计数

proc report data=sashelp.cars nowd;
 column make type;
 define make / group;
 define type / across;
run;

如何将格式应用于创建的跨列?

1 个答案:

答案 0 :(得分:1)

在下面的代码中,显示了ACROSS变量的计数。但是,可以通过在ACROSS变量之后的COLUMN语句中使用逗号来明确它。然后可以在DEFINE语句中格式化N列。

proc report data=sashelp.cars nowd;
 column make type,n;
 define make / group;
 define type / across;
 define n / '' format=comma10.1;
run;

当跨列有多个时,可以在COMPUTE块中完成唯一格式化列。要查看列的外观,请在PROC REPORT行上使用OUT =语句生成数据集。包括MISSING =选项可以用零替换缺失的点。 Art Carpenter's book is an excellent guide to Proc Report...and where I got this tip

Options missing=0;
proc report data=sashelp.cars nowd out=work.report;
 column make type,n;
 define make / group;
 define type / across;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;
run;

无论何时使用绝对列(例如____c4____)的引用,当该列不存在时都可能发生错误。创建用户格式并在DEFINE语句中为该ACROSS变量使用PRELOADFMT将强制显示所有格式值并保证____c4____存在。有关详细信息,请参阅this question

options missing=.;

Proc format;
 value $type
 'Hybrid'='Hybrid' 'SUV'='SUV' 'Sedan'='Sedan'
 'Sports'='Sports' 'Truck'='Truck' 'Wagon'='Wagon';
Run;

Proc Report data=sashelp.cars(where=(make='Buick')) nowd;
 column make type,n;
 define make / group;
 define type / across format=$type. preloadfmt;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;

run;

另一个编辑,一个同事告诉我,通过“消隐”定义语句中的所有标签,可以删除跨变量下方的空白区域。在此示例中,由于组变量(MAKE)现在没有标签,因此它需要在列语句中使用它的标签。

options missing=.;

Proc format;
 value $type
 'Hybrid'='Hybrid' 'SUV'='SUV' 'Sedan'='Sedan'
 'Sports'='Sports' 'Truck'='Truck' 'Wagon'='Wagon';
Run;

proc report data=sashelp.cars(where=(make='Buick')) nowd;
 column ('Make' make) type,n;
 define make / '' group;
 define type / '' across format=$type. preloadfmt;
 define n / '';

 compute n;
  call define('_c4_','format','dollar10.');
 endcomp;

run;