我一直认为如果在里面使用它%let会创建一个local变量%macro . . . %mend
但是当我运行此代码时,SAS日志显示 GLOBAL TESTVAR value1
%let testVar = value2;
%macro test;
%let testVar = value1;
%mend;
%test
%put _all_;
Run Code Online (Sandbox Code Playgroud)
所以,我无法理解为什么全局变量的值testVar改变为value1.我原以为它没有改变value2.在%let里面的语句%macro应该影响只在本地符号表.
当宏处理器执行可以创建宏变量的宏程序语句时,如果没有可用的具有相同名称的宏变量,宏处理器将在本地符号表中创建该变量
关键是"如果没有可用的同名宏变量" - 在这种情况下,可以使用具有相同名称的宏变量,因为您已经将testVar定义为全局变量.
您可以为其指定一个不与全局共享的名称,也可以将其明确声明为local:
%let testVar = value2;
%macro test;
%local testVar;
%let testVar = value1;
%mend;
%test
Run Code Online (Sandbox Code Playgroud)