SAS 中的粘性宏变量

Sticky Macro variables in SAS

我是运行一个包含宏函数的宏循环:

%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 但我遇到了错误。

如果我用 2 替换所有 &j,代码就可以工作,所以代码没问题,循环的递归性质没有正确注入变量。 TIA.

确保将宏使用的宏变量定义为 LOCAL。

以您可能用作循环计数器的宏变量 I 为例。如果您不首先将其声明为局部变量,那么如果已经存在一个名为 I 的宏变量,SAS 将修改该宏变量而不是创建一个新的局部变量。然后,当您的宏停止并且调用它的宏尝试继续时,&I 的值已更改。

PS 不要嵌套宏定义。那只会造成混乱。