在PROC SQL中创建的宏变量是本地变量还是全局变量

Vic*_*tor 3 sas sas-macro

我写的时候:

proc sql;
    select count(*) into :out from sashelp.cars;
quit;
Run Code Online (Sandbox Code Playgroud)

宏变量out是全局变量还是局部变量?

Dom*_*azz 8

这取决于.让我们整理一个测试宏,看看会发生什么

%macro test();
proc sql noprint;
select count(*) into :x from sashelp.cars;
quit;
%put IN MACRO: &x;
%mend;

options nosource nonotes;

%symdel x;

%test();

%put Out MACRO: &x;

%let x=2;

%put Out MACRO: &x;

%test();

%put Out MACRO: &x;
Run Code Online (Sandbox Code Playgroud)

创建:

IN MACRO:      428
WARNING: Apparent symbolic reference X not resolved.
Out MACRO: &x
Out MACRO: 2
IN MACRO:      428
Out MACRO:      428
Run Code Online (Sandbox Code Playgroud)

所以在开始时,没有X宏变量.该%test()宏填充一个局部变量.它不在宏之外.

之后,我们将%let x=2制作X成为全局变量.然后我们执行%test()宏并看到它将X其值保持在%test()宏之外.

因此,如果它在全球存在,它将继续存在并被覆盖.如果它不是全局存在的,则它在全局范围内仍然不存在.