2013-06-21 75 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