SAS:如何保存从多个%ODS输出DO循环(SAS: how to save multiple OD

2019-10-28 12:57发布

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循环的迭代。

Answer 1:

您可以使用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 outputods table ,但我用这两个在这个例子中,并修改了它要一致。



Answer 2:

如果你想存储每次运行的输出; 你将不得不将它们保存到同一数据通过附加您的结果集。 因此,使用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 


文章来源: SAS: how to save multiple ODS output from a %DO loop
标签: sas