SAS:PROC FREQ或PROC报告的个别表标题?

时间:2016-02-10 14:36:00

标签: performance sas report title frequency

我希望通过执行包含多个PROC FREQ语句的单个PROC FREQ来提高效率,而不是在非常大的数据集上执行多个单独的TABLE过程。我们的质量检查流程要求表标题使用单个TABLE语句使用单个TITLE语句很简单,但这可能是多个TABLE语句吗?

获取以下示例数据和代码:

DATA TEST;
    INPUT TEMPERATURE HUMIDITY PLATE FORM $12.;
    DATALINES;
    25  75  1   HOT
    30  75  2   COLD
    25  45  3   HOT
    30  45  4   COLD
    25  55  5   HOT
    30  55  6   COLD
    25  15  7   HOT
    30  15  8   COLD
    ;
RUN;

** SINGLE PASS ON PROC FREQ **;
PROC FREQ DATA = TEST;
    TITLE1 "TEMPERATURE FREQS";
      TABLE TEMPERATURE / LIST OUT=FREQS_TEMP;
    TITLE2 "HUMIDITY FREQS";
      TABLE HUMIDITY / LIST OUT=FREQS_HUM;
    TITLE3 "PLATE FREQS";
      TABLE PLATE / LIST OUT=FREQS_PLATE;
    TITLE4 "FORM FREQS";
      TABLE FORM / LIST OUT=FREQS_FORM;
RUN;TITLE1;TITLE2;TITLE3;TITLE4;

标题在输出的最顶部而不是每个表堆叠在一起,所以在数据步骤中是否可以这样,或者是否必须创建自定义模板? PROC REPORT可能是自定义频率更可行的选择吗?

2 个答案:

答案 0 :(得分:4)

如果数据集非常大,可以使用proc document的一个选项,即一些工作,但值得一试。我认为这与将频率输出到单独的表中然后单独执行报告或频率以及稍微不那么混乱的工作量相同。

PROC DOCUMENT允许您编辑输出对象,然后重播它。在您的情况下,您在freq中缺少的是表之间的分页符 - SAS仅在页眉上放置title,因此您不会在表之间获取它。我认为PROC FREQ在run之前也不创建任何表,所以前三个标题语句不做任何事情(你的只是因为你使用titel1 / 2/3/4 - 如果你使用{{1每次,只有第四个会生效。)

您需要先添加分页符,然后添加标题(不要让它们从PROC FREQ中保留,因此您可以将它们从中删除)。所以:

title

答案 1 :(得分:-1)

在这种情况下,我建议使用宏路径。从长远来看也可能节省代码。使用PROC FREQ创建一个宏并多次调用它。

%macro freq_out(VName, VSub);

proc freq data=test;
title "&VName Freqs";
table &vname/list out=freqs_&vsub;
run;

%mend;

%freq_out(Temperature, Temp);
%freq_out(Humidity, Hum);