当我写:
proc sql;
select count(*) into :out from sashelp.cars;
quit;
宏变量
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;
创建:
IN MACRO: 428
WARNING: Apparent symbolic reference X not resolved.
Out MACRO: &x
Out MACRO: 2
IN MACRO: 428
Out MACRO: 428
所以一开始,没有X宏变量。
%test()
宏填充了一个局部变量。它在宏之外不可用。之后,我们设置
%let x=2
使 X
成为一个全局变量。然后我们执行 %test()
宏并看到 X
将其值保留在 %test()
宏之外。因此,如果它在全局范围内存在,则它会继续存在并被覆盖。如果它在全局范围内不存在,则它继续在全局范围内不存在。
关于sas - 在 PROC SQL 中创建的宏变量是局部还是全局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33726275/