我正在运行一个包含宏函数的宏循环:
%macro loop;
%do j=1 %to 1000;
%macro variable;
%end;
%mend;
宏变量本身有一些宏函数,如下所示:
%macro variable;
%macro rename(x);
proc sql;
create table Renamed&j&x as
select *,
rename1 as rename1,
rename2 as rename2,
...
from rename&j&x
quit;
%rename(1);
%rename(2);
....
%mend;
%mend;
这些粘性嵌套宏循环和变量的正确语法是什么?我似乎记得使用&& j和& x但我收到了错误。
如果我将所有& j替换为2,代码就可以工作,所以代码很好,循环的递归性质不能正确地注入变量。 TIA。
答案 0 :(得分:0)
确保将宏用作LOCAL的宏变量定义。
以宏变量I
为例,您可以将其用作循环计数器。如果您没有首先将其声明为local,那么如果已存在名为I
的宏变量,则SAS将修改该宏变量,而不是创建新的本地变量。然后,当您的宏停止并且调用它的宏尝试继续时,&I
的值已更改。
PS 不嵌套宏定义。这只会引起混淆。