data scores;
length name $ 12;
input name $ score1 score2;
datalines;
Riley 1132 1187
Henderson 1015 1102
;
%MACRO DO_MEAN;
%DO I = 1 %TO 10;
PROC MEANS data = scores;
VAR score1;
TITLE "Average math score";
RUN;
%END;
%MEND DO_MEAN;
ods output Summary = Summary;
%DO_MEAN;
我有一个名为%DO_MEAN
的简单宏,用于计算数据集中的平均值score1
。我希望宏从i = 1到10次运行。
调用宏输出MEANS程序的结果10次。是的,我知道输出完全相同,但我只是想用这个可重复的例子来说明。
在调用宏来存储我的10个输出之前,我尝试使用ods output Summary = Summary;
。但是,生成的Summary
数据集只有1行。如何调整代码以便存储所有10个输出?
我希望上面得到的ods数据集有10行,每行对应于%DO循环迭代之一。
答案 0 :(得分:0)
您可以在ODS OUTPUT语句中使用PERSIST选项,如下所示: http://documentation.sas.com/?docsetId=odsug&docsetTarget=p0oxrbinw6fjuwn1x23qam6dntyd.htm&docsetVersion=9.4&locale=en
ods output parameterestimates (persist=proc) = want;
proc reg data=sashelp.class;
where sex='F';
model height = weight;
run;
proc reg data=sashelp.class;
where sex='M';
model height = weight;
run;
quit;
ods output clear;
但最好的答案是首先不要这样做,而是使用BY组。
proc sort data=sashelp.class out=class; by sex; run;
ods output ParameterEstimates = want2;
proc reg data=class;
by sex;
model height = weight;
run;
编辑:您可以使用ods output
或ods table
,但我在此示例中使用了两者并将其修改为一致。
答案 1 :(得分:0)
如果要存储每次运行的输出;您必须通过附加结果将它们保存到同一数据集中。因此,请使用PROC APPEND
。
注意:我将你的ODS输出和Proc移动到你的循环中,所以ods表将附加每个循环:
代码:
/*Create an empty base table*/
proc sql;
create table WORK.ods_output
(
score1_N num format=BEST1. label='N',
score1_Mean num format=BEST12. label='Mean',
score1_StdDev num format=BEST12. label='Std Dev',
score1_Min num format=BEST12. label='Minimum',
score1_Max num format=BEST12. label='Maximum'
);
quit;
%MACRO DO_MEAN;
%DO I = 1 %TO 10;
PROC MEANS data = scores;
VAR score1;
TITLE "Average math score";
RUN;
ods output Summary = Summary;
proc append base=ods_output data=summary; quit;
%END;
%MEND DO_MEAN;
%DO_MEAN;
包含10行的输出表:(忽略日志警告)
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132
score1_N=2 score1_Mean=1073.5 score1_StdDev=82.731493399 score1_Min=1015 score1_Max=1132