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倍。
调用宏输出的装置过程的结果的10倍。 是的,我知道这个输出是完全一样的,但我只是想用这个重复的例子,是为了说明的缘故。
我尝试使用ods output Summary = Summary;
之前调用存储我的10个输出宏。 然而,得到的Summary
数据集只有1行。 我如何调整我的代码,这样我可以存储所有10个输出?
我想得到的ODS的数据集的上方有10行,每行对应于一个%DO循环的迭代。
您可以使用PERSIST对ODS OUTPUT语句选项,记录在这里: 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;
但是,最好的回答是不这样做,首先,使用由组来代替。
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
,但我用这两个在这个例子中,并修改了它要一致。
如果你想存储每次运行的输出; 你将不得不将它们保存到同一数据通过附加您的结果集。 因此,使用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