SAS宏中此代码的逻辑是什么?

SAS宏中此代码的逻辑是什么?,sas,sas-macro,Sas,Sas Macro,我需要知道宏定义之外的测试值是多少?如果在全局范围内定义了宏变量,即您的%LET X=15,则宏内对该宏变量的任何更改都会影响全局值,除非使用%LOCAL X %let x = 15; %macro test; %let x = 10; %put x inside macro test = &x; %mend test; %test; %put x outside the macro test =&x;

我需要知道宏定义之外的测试值是多少?

如果在全局范围内定义了宏变量,即您的
%LET X=15,则宏内对该宏变量的任何更改都会影响全局值,除非使用
%LOCAL X

%let x = 15;


  %macro test;
        %let x = 10;
        %put x inside macro test = &x;
    %mend test;

    %test;

    %put x outside the macro test =&x;
    %put x inside the macro test =&x;

如果在全局范围内定义了宏变量,即
%X=15,则宏内对该宏变量的任何更改都会影响全局值,除非使用
%LOCAL X

%let x = 15;


  %macro test;
        %let x = 10;
        %put x inside macro test = &x;
    %mend test;

    %test;

    %put x outside the macro test =&x;
    %put x inside the macro test =&x;

我知道的是,在宏定义中,宏保存在本地符号表中。变量X是在宏定义测试中使用%let语句创建的,本质上是本地的。我不知道当我在宏定义外调用它时,为什么它显示全局性。我知道的是,在宏定义内,宏保存在本地符号表中。变量X是在宏定义测试中使用%let语句创建的,本质上是本地的。我不知道为什么当我在宏定义之外调用它时,它显示出全局性。如果:%macro test1;%本地价值2;数据为空;调用symput('value1','20');跑%let value2=100;%修复测试1;%测试1;%将A=&value1和B=&value2;换句话说,在宏内部,始终确保将宏变量定义为
local
global
以避免错误。如果:%macro test1;%本地价值2;数据为空;调用symput('value1','20');跑%let value2=100;%修复测试1;%测试1;%将A=&value1和B=&value2;换句话说,在宏内部,始终确保将宏变量定义为
local
global
,以避免出现错误。 %let x = 15; /* Global X = 15 */ %macro test; %local x; %let x = 10; /* Local X = 10 */ %put x inside macro test = &x; /* 10 */ %mend test; %test; %put x outside the macro test =&x; /* 15 */