我希望通过执行包含多个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
可能是自定义频率更可行的选择吗?
答案 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);