sas - PROC SQL 中创建的宏变量是局部变量还是全局变量

标签 sas sas-macro

当我写作时:

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/

相关文章:

SAS - 检查外部文件 (.csv) 是否为空;如果没有,导入到 SAS

sas - 函数 LAG<n> 中的动态 n(变量)SAS

SAS:保留具有指定日期间隔的观测值

SAS EG : project file version not supported

sas - SAS中如何使用substring函数获取单词的最后一部分?

sas - proc 中每个变量的单独类意味着

sas - 从SAS中的字符串中删除单引号

以宏变量值为条件的 SAS 宏函数

python - 从 GradientBoostingClassifier 中提取决策规则

sas - 获取 SAS 表中宏变量的值