通过%let定义SAS宏变量与调用symput之间的区别?

use*_*092 2 variables macros definition sas

我不确定两者之间有什么区别

%let m = product和cal symput('m','product')是?

是不是两个表达式都创建了af宏变量m,它具有有价值的产品?

Joe*_*Joe 8

%let用于根据文本或解析为文本的表达式定义宏变量.它在开放代码或宏中调用. %let自动修剪前导和尾随空白的宏变量.文档可以在这里找到.

call symput(此处的文档)用于分配SAS数据集变量的内容,解析为SAS数据集变量(或PDV变量)的表达式,字符值或解析为字符值的表达式(包括数值) ,解析为其默认格式的等效字符,通常为BEST12.). call symput没有修剪前导或尾随空白,因此,例如表达

%let x=5;
%put [&x];
Run Code Online (Sandbox Code Playgroud)

给你一个与表达式有些不同的结果

data _null_;
call symput('y',5);
run;
%put [&y];
Run Code Online (Sandbox Code Playgroud)

call symputx(自9.2起可用)具有更多类似的结果%let,因为它修剪了前导和尾随空白.这对于从数字创建的宏变量特别有用,因为它们通常具有几个前导空格,如上例所示.

%let并且call symput\symputx也有作用域一些差异.在开放代码(或不在宏中的数据步骤)中使用时,都会将宏变量放在全局表中,但%let在宏中使用会将变量放在已存在的最本地表中(如果有的话); 即,如果您有一个global变量,&myvar那么%let myvar=5;将修改全局变量&myvar,而不是创建一个本地范围的变量. call symput将变量放在最本地的非空符号表中,无论它是否已存在于全局范围内. call symputx除非您指定一个可选参数来指示您希望将其放置在哪个表中,否则将执行相同的操作.