我不确定
之间有什么区别%让m =产品和 cal symput('m','product')是?
是不是两个表达式都创建了af变量m,它具有值product?
答案 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
具有更多类似的结果,因为它修剪了前导和尾随空白。这对于从数字创建的宏变量特别有用,因为它们通常具有几个前导空格,如上例所示。
%let
和call symput\symputx
在范围界定方面也存在一些差异。在开放代码(或不在宏中的数据步骤)中使用时都会将宏变量放在全局表中,但宏中使用的%let
会将变量放在已存在的最本地表中,如果是的话;即,如果您有global
变量&myvar
,则%let myvar=5;
将修改全局变量&myvar
,而不是创建本地范围的变量。 call symput
将变量放在最本地的非空符号表中,无论它是否已存在于全局范围内。 call symputx
将执行相同的操作,除非您指定一个可选参数,指示您希望将其放置在哪个表中。
答案 1 :(得分:3)
唯一的区别是调用%LET
或call symput
的方法。
%LET
用于开放代码,而不是在datastep或proc中。
call symput
在datastep中使用,而不是在开放代码中使用。
答案 2 :(得分:0)
%let是一个宏语句,可以在开放代码中或宏内部使用。呼叫症状只能在DATA步骤中使用,而不能在开放代码中使用。请注意,此数据步骤可能位于宏内。
关于所创建变量的范围,请参阅: