这是我创建的一个简单的SAS程序......
%MACRO SCANLOOP();
%DO I=1 %TO 5;
%put &I;
%END;
%MEND;
%MACRO TEST();
%DO I=1 %TO 3;
%SCANLOOP();
%END;
%MEND;
%TEST();
RUN;
我期待这个SAS代码产生以下输出:
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
但我刚刚得到......
1
2
3
4
5
任何人都可以向我解释原因吗?
由于
布赖恩
答案 0 :(得分:2)
您需要将宏变量定义为LOCAL。否则,SAS将使用外部作用域中具有相同名称的现有宏变量。对于您的特定示例,您必须在SCANLOOP宏中使其成为本地。但你真的应该在两者中都这样做。
%MACRO SCANLOOP();
%LOCAL I;
%DO I=1 %TO 5;
%put &I;
%END;
%MEND;
答案 1 :(得分:1)
哦,那些变量不是我预期的方式。如果我将第一个宏中的变量从I更改为J,那么它可以正常工作。