sas - 为什么不 %let 创建一个局部宏变量?

标签 sas

我一直以为%let创建一个 local如果在 %macro . . . %mend 内使用,则变量

但是当我运行此代码时,SAS 日志显示 GLOBAL TESTVAR value1

%let testVar = value2; 
%macro test; 
%let testVar = value1; 
%mend;   

%test 

%put _all_;

所以,我不明白为什么全局变量 testVar 的值改为 value1 .我原以为它会保持不变 value2 . %let %macro里面的声明应该只影响本地符号表。

SAS documentation says :

When the macro processor executes a macro program statement that can create a macro variable, the macro processor creates the variable in the local symbol table if no macro variable with the same name is available to it

最佳答案

关键是“如果没有同名的宏变量可用” - 在这种情况下,可以使用同名的宏变量,因为您已经将 testVar 定义为全局变量。

您可以为其指定一个不与全局共享的名称,也可以将其显式声明为本地:

%let testVar = value2; 
%macro test; 
    %local testVar;
    %let testVar = value1; 
%mend;   

%test 

关于sas - 为什么不 %let 创建一个局部宏变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532849/

相关文章:

unicode - 在 SAS 中导入 SPSS 文件 - 语言差异

loops - SAS——按组处理保留第一个和最后一个点

mysql - SAS/PROC-SQL 从具有唯一键的表转换为具有相同键的多行表

scope - 为什么 SAS 宏变量默认不是局部作用域?

macros - SAS 宏从表中提取选定的行

function - 在 SAS proc fcmp 中如何返回 2 个数字

sas - 在 SAS 数据集成中,创建用户编写的转换以在某些条件成立时跳过进一步的作业执行而不会给出错误

sas - 使用 ODS 更新 Excel 输出?

compiler-errors - 使用关键字的一部分提取SAS中的完整关键字

sas - 替换 SAS 数据集中的值