为什么不创建一个本地宏变量?

时间:2014-12-17 18:58:55

标签: sas

我一直认为%let如果在local

内使用,则%macro . . . %mend会创建一个GLOBAL TESTVAR value1变量

但是当我运行此代码时,SAS日志会显示%let testVar = value2; %macro test; %let testVar = value1; %mend; %test %put _all_;

testVar

因此,我无法理解为什么全局变量value1的值更改为value2。我期待它不变%let%macro内的{{1}}语句应仅影响本地符号表。

SAS documentation says

  

当宏处理器执行可以创建宏变量的宏程序语句时,如果没有可用的具有相同名称的宏变量,宏处理器将在本地符号表中创建该变量

1 个答案:

答案 0 :(得分:7)

关键是“如果没有可用的同名宏变量” - 在这种情况下,可以使用具有相同名称的宏变量,因为您已经将testVar定义为全局变量。

您可以为其指定一个不与全局共享的名称,也可以将其明确声明为本地名称:

%let testVar = value2; 
%macro test; 
    %local testVar;
    %let testVar = value1; 
%mend;   

%test