我不想在一个非常大的数据集上执行多个单独的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
是自定义频率更可行的选择吗? 最佳答案
一种选择是使用proc document
,虽然有些工作,但如果数据集非常大,可能会值得。我认为这与将频率输出到单独的表,然后分别对这些表进行报告或频率进行的工作量大致相同,而且也不会太杂乱。
PROC DOCUMENT
使您可以编辑输出对象,然后重播它。在您的情况下,您在频率中缺少的是表之间的分页符-SAS仅在页眉上放置title
,因此您不会在表之间获取分页符。我认为PROC FREQ在run
之前也不会创建任何表,因此前三个title语句不会做任何事情(您这样做是因为您使用titel1/2/3/4-如果您每次使用title
,则只会使用第四个将会生效)。
您需要先添加分页符,然后添加标题(不幸的是,不要将它们保留在PROC FREQ中,因此可以从中删除它们)。所以:
*ODS DOCUMENT creates the DOCUMENT object you will later modify;
ods document name=freqs(write);
** SINGLE PASS ON PROC FREQ **;
PROC FREQ DATA = TEST;
TITLE "TEMPERATURE FREQS";
TABLE TEMPERATURE / LIST OUT=FREQS_TEMP;
TITLE "HUMIDITY FREQS";
TABLE HUMIDITY / LIST OUT=FREQS_HUM;
TITLE "PLATE FREQS";
TABLE PLATE / LIST OUT=FREQS_PLATE;
TITLE "FORM FREQS";
TABLE FORM / LIST OUT=FREQS_FORM;
RUN;
title;
ods document close;
*PROC DOCUMENT is an interactive proc, so it stays active until QUIT;
proc document name=freqs;
*Just a look at what it looks like under the hood - can be removed in production;
list/levels=all;
run;
*Here we create page breaks (OBPAGE command) after each table.;
obpage \Freq#1\Table1#1\OneWayFreqs#1 /after;
obpage \Freq#1\Table2#1\OneWayFreqs#1 /after;
obpage \Freq#1\Table3#1\OneWayFreqs#1 /after;
*Here we add the titles.;
obtitle \Freq#1\Table1#1\OneWayFreqs#1 "TEMPERATURE FREQS";
obtitle \Freq#1\Table2#1\OneWayFreqs#1 "HUMIDITY FREQS";
obtitle \Freq#1\Table3#1\OneWayFreqs#1 "PLATE FREQS";
obtitle \Freq#1\Table4#1\OneWayFreqs#1 "FORM FREQS";
*And here we replay the document with the changes;
replay ^;
run;
quit;
关于performance - SAS:PROC FREQ或PROC REPORT的各个表标题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35318058/