sas宏编程
- 作者: 美女你很内涵
- 来源: 51数据库
- 2020-09-29
先写一般的SAS语句,然后去替换需要用到变量的部分。
引号问题:如果用单引号,那么SAS不会替换里面的变量值;如果用双引号,那么里面&variable的值会被替换掉。
SAS的报错记录:有MERROR(找不到macro)、SERROR(找不到变量)、MLOGIC(SAS将在日志中输出详细的执行情况)、MPRINT(SAS将在日志中输出翻译出来的SAS代码)、SYMBOLGEN(SAS将在日志中输出变量当时的赋值)。
下面这段code应该可以解决你的问题
%macro creatdata;
%do i=1 %to 10;
data file&i.(drop=id);
do id=1 to 5;
score=ceil(100*ranuni(&i));
output;
end;
run;
proc means data=file&i ;
var score;
output out=outfile&i. mean=score_mean;
run;
data _null_;
set outfile&i.;
call symput( compress("score_mean"||"&i."), put(score_mean, 8.) );
run;
data out&i;
score=&&score_mean&i;
run;
data newscore&i;
set file&i. out&i. ;
run;
%end;
%mend;
%creatdata;
引号问题:如果用单引号,那么SAS不会替换里面的变量值;如果用双引号,那么里面&variable的值会被替换掉。
SAS的报错记录:有MERROR(找不到macro)、SERROR(找不到变量)、MLOGIC(SAS将在日志中输出详细的执行情况)、MPRINT(SAS将在日志中输出翻译出来的SAS代码)、SYMBOLGEN(SAS将在日志中输出变量当时的赋值)。
下面这段code应该可以解决你的问题
%macro creatdata;
%do i=1 %to 10;
data file&i.(drop=id);
do id=1 to 5;
score=ceil(100*ranuni(&i));
output;
end;
run;
proc means data=file&i ;
var score;
output out=outfile&i. mean=score_mean;
run;
data _null_;
set outfile&i.;
call symput( compress("score_mean"||"&i."), put(score_mean, 8.) );
run;
data out&i;
score=&&score_mean&i;
run;
data newscore&i;
set file&i. out&i. ;
run;
%end;
%mend;
%creatdata;
推荐阅读
