2015-10-06 74 views
0

下面是一個簡單的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 

任何人都可以向我解釋爲什麼?

感謝

布賴恩

回答

1

哦,這些變量沒有作用域我預期的方式。如果我將第一個宏中的變量從I更改爲J,那麼它就可以工作。

2

您需要定義宏變量作爲LOCAL。否則SAS將使用外部範圍中具有相同名稱的現有宏變量。對於您的特定示例,您必須使我在SCANLOOP宏中是本地的。但你應該在兩個方面都做到這一點。

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

啊!很高興知道......謝謝:-D – user1094779