我是宏的初学者。我修改了一个宏程序并且工作。 但是,我必须如下编写以下宏一百次。
%quint(dsn=cc1, var=MB, quintvar=MB5, num=111) ;
%quint(dsn=cc1, var=MB, quintvar=MB5, num=112) ;
%quint(dsn=cc1, var=MB, quintvar=MB5, num=113) ;
-
-
%quint(dsn=cc1, var=MB, quintvar=MB5, num=400) ;
每次我为这份工作制作一个程序时,num被识别为一个arugment而不是常数。 我怎样才能做到这一点简单易行?
答案 0 :(得分:0)
您可以使用RETAIN语句和CALL EXECUTE。
%macro quint (dsn, var, quintvar, num);
%put &dsn;
%put &var;
%put &quintvar;
%put #
%mend;
data _null_;
retain numv 111;
do until (numv = 400);
call execute ('%quint(cc1, MB, MB5,'||numv||')');
numv+1;
end;
run;
这很有效。
答案 1 :(得分:0)
使用调用执行通常是可以的,但它可能有点繁琐地使引用正确,我发现它有时无法正确处理复杂的宏。我更喜欢使用宏方法,通过重写原始宏来接受循环开始和结束的参数,或者通过编写包装宏,例如。
%macro quint (dsn, var, quintvar, num);
%put &dsn;
%put &var;
%put &quintvar;
%put #
%mend;
%macro run_quint(dsn, var, quintvar, num_from, num_to);
%local i;
%do i = &num_from %to &num_to;
%quint(dsn=&dsn, var=&var, quintvar=&quintvar, num=&i)
%end;
%mend;
%run_quint(dsn=cc1, var=MB, quintvar=MB5, num_from=111, num_to = 115);