2015-08-31 187 views

回答

3

引號不是宏語言的一部分。宏語言的工作(最常見的)是生成SAS代碼。引號是SAS代碼語言的一部分。因此,無論您希望生成帶雙引號的SAS代碼,您都應該在宏語言中使用雙引號。

例如。考慮SAS數據步賦值語句:

name="Mary" ; 

的SAS語言使用引號告訴數據跳躍編譯器,瑪麗是一個字符串值,而不是一個變量的名稱。

如果你想使用的宏語言,你可以這樣做:

%let name=Mary; 
data want; 
    Name="&name" ; 
run; 

或者你可以這樣做:

%let name="Mary"; 
data want; 
    Name=&name; 
Run; 

在這兩種情況下,引號的含義的數據步編譯器相同的。他們告訴它,瑪麗是一個文本字符串。如果您沒有引號,編譯器會將Mary視爲引用數據步驟變量。

宏語言不需要引號來標識文本字符串,因爲宏語言中的所有內容都是文本字符串。宏語言不知道數據步驟變量。

+0

這是*主要*正確的 - 以及我如何看待它。引用對於[標記化]很重要(http://support.sas.com/documentation/cdl/en/mcrolref/62978/HTML/default/viewer.htm#p030uw6k2s7wzyn18i9obutg923m.htm),特別是與[宏註釋被解析](http://support.sas.com/documentation/cdl/en/mcrolref/62978/HTML/default/viewer.htm#n17rxjs5x93mghn1mdxesvg78drx.htm)。但是對於99%的東西,引用字符與宏語言無關。 – Joe

+1

也許你應該附加一兩句關於單引號和雙引號之間的區別?我知道這個問題只是詢問雙引號,但我覺得這應該是爲了完整性。 –

0

這一切都取決於你的宏變量的價值和你想要做什麼。舉例:

%let unQuoted = My string; 
%let quoted = "My string"; 

data _null_; 
    isEqual = "&unQuoted." = &quoted.; 
    put _all_; 
run; 

打印isEqual=1,意思是對的。如果這對你沒有幫助,請在你的問題中更具體。