2013-06-21 68 views

回答

3

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

%LET在开放代码中使用,而不是一个或datastep PROC内。

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

+0

好,非常感谢! – user1626092

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也会这样做,除非您指定一个可选参数,指出希望放置哪个表。

+0

thanx那么多! – user1626092

+0

谢谢你的解释,乔。 –

+0

我做了测试。这很好。再次感谢那些知识。 –

0

%let是可以在开放代码或宏内使用的宏语句。呼叫症状只能在DATA步骤中使用,而不能在开放代码中使用。请注意,这个DATA Step可能在宏里面。

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

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