我一直认为%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}}语句应仅影响本地符号表。
当宏处理器执行可以创建宏变量的宏程序语句时,如果没有可用的具有相同名称的宏变量,宏处理器将在本地符号表中创建该变量
答案 0 :(得分:7)
关键是“如果没有可用的同名宏变量” - 在这种情况下,可以使用具有相同名称的宏变量,因为您已经将testVar定义为全局变量。
您可以为其指定一个不与全局共享的名称,也可以将其明确声明为本地名称:
%let testVar = value2;
%macro test;
%local testVar;
%let testVar = value1;
%mend;
%test