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 */