在循环中调用宏?

时间:2015-10-06 23:41:47

标签: sas

这是我创建的一个简单的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

任何人都可以向我解释原因吗?

由于

布赖恩

2 个答案:

答案 0 :(得分:2)

您需要将宏变量定义为LOCAL。否则,SAS将使用外部作用域中具有相同名称的现有宏变量。对于您的特定示例,您必须在SCANLOOP宏中使其成为本地。但你真的应该在两者中都这样做。

%MACRO SCANLOOP();
  %LOCAL I;
  %DO I=1 %TO 5; 
    %put &I;
  %END;
%MEND;

答案 1 :(得分:1)

哦,那些变量不是我预期的方式。如果我将第一个宏中的变量从I更改为J,那么它可以正常工作。