当我写作时:
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/