SAS中的粘滞宏变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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为例。如果您没有首先将其声明为local,那么如果已存在名为I的宏变量,则SAS将修改该宏变量,而不是创建新的本地变量。然后,当您的宏停止并且调用它的宏尝试继续时,&I的值已更改。

PS不要嵌套宏定义。这只会引起混淆。

以上是关于SAS中的粘滞宏变量的主要内容,如果未能解决你的问题,请参考以下文章

SAS代码错误地将宏变量的值作为输出中的新列/变量传递

伪代码转换为SAS宏代码

SAS Proc Datasets - 使用宏变量更改数据集名称

SAS中的宏变量开头和结尾分别是啥命令?

在宏内部使用变量内部数据集名称时,SAS语法错误22和200

sas怎么定义一个宏变量求n项和