我写的时候:
proc sql;
select count(*) into :out from sashelp.cars;
quit;
Run Code Online (Sandbox Code Playgroud)
宏变量out是全局变量还是局部变量?
这取决于.让我们整理一个测试宏,看看会发生什么
%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()宏之外.
因此,如果它在全球存在,它将继续存在并被覆盖.如果它不是全局存在的,则它在全局范围内仍然不存在.