|
|
楼主

楼主 |
发表于 2010-6-1 11:23:10
|
只看该作者
为什么不可以循环调用宏????急~急
我的问题描述如下,请问该如何解决???
先谢谢啦
1、我先是定义了一个宏,如下,可以运行
%macro mbad(group,A,target,n);
proc sort data=&group out=Sgroup;
by group;
run;
data &A.&n.&target._bad(keep=group aren_num ali_num aprop);
set Sgroup;
by group;
retain aren_num ali_1 ali_2 ali_3 num 0;
if ae01&target.=&n or ae02&target.=&n or ae03&target.=&n then aren_num+1;
if ae01&target.=&n then ali_1+1;
if ae02&target.=&n then ali_2+1;
if ae03&target.=&n then ali_3+1;
ali_num=sum(ali_1,ali_2,ali_3);
num+1;
aprop=aren_num/num;
if last.group then output;
run;
%mend;
2、然后分别调用宏,调用了很多次,每次是出一个表,如下,都可可以运行成功
%mbad(Agroup,A,deg,n=1)
%mbad(Agroup,A,deg,n=2)
%mbad(Agroup,A,deg,n=3)
%mbad(Bgroup,B,deg,n=1)
%mbad(Bgroup,B,deg,n=2)
%mbad(Bgroup,B,deg,n=3)
%mbad(Agroup,A,rela,n=1)
%mbad(Agroup,A,rela,n=2)
%mbad(Agroup,A,rela,n=3)
%mbad(Agroup,A,rela,n=4)
%mbad(Agroup,A,rela,n=5)
%mbad(Bgroup,B,rela,n=1)
%mbad(Bgroup,B,rela,n=2)
%mbad(Bgroup,B,rela,n=3)
%mbad(Bgroup,B,rela,n=4)
%mbad(Bgroup,B,rela,n=5)
%mbad(Agroup,A,drop,n=1)
%mbad(Bgroup,B,drop,n=1)
3、由于调用的次数太多,且有规律性,我打算使用一个循环实现上面的宏调用。
但是出现的问题是,%mbad(groups,A,target,n);好像根本没有使用我在循环中定义的变量。
报出错误如下:
ERROR: 文件“WORK.GROUPS.DATA”不存在。
ERROR 117-185: 有 5 个未闭合的“DO”块。
data aaa;
do groups="Agroup","Bgroup";
do A="A","B";
do target="deg","rela","drop";
do nums=3,5,1;
do n=1 to nums;
%mbad(groups,A,target,n);
end;
end;
end;
end;
end;
run; |
|