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

时间:2013-06-21 07:22:09

标签: variables macros sas definition

我不确定

之间有什么区别

%让m =产品和 cal symput('m','product')是?

是不是两个表达式都创建了af变量m,它具有值product?

3 个答案:

答案 0 :(得分:7)

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

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

%let x=5;
%put [&x];

给出的结果与表达式

略有不同
data _null_;
call symput('y',5);
run;
%put [&y];

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

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

答案 1 :(得分:3)

唯一的区别是调用%LETcall symput的方法。

%LET用于开放代码,而不是在datastep或proc中。

call symput在datastep中使用,而不是在开放代码中使用。

答案 2 :(得分:0)

%let是一个宏语句,可以在开放代码中或宏内部使用。呼叫症状只能在DATA步骤中使用,而不能在开放代码中使用。请注意,此数据步骤可能位于宏内。

关于所创建变量的范围,请参阅:

http://www.lexjansen.com/phuse/2009/po/PO15.pdf