2017-07-03 81 views
2

我正在瀏覽SAS代碼,發現引用宏變量的下列方法。引用已定義的宏變量

  1. & 變量名
  2. & 變量名

我知道引用的第一種方式是我們如何指的是SAS定義的宏變量的正常方式。

但是,請你解釋一下如何做第二種方式(不包括宏變量名後段)是從第一種方式

+0

注意這些是宏變量引用。要引用一個變量,你只需使用它的名字。 – Tom

回答

1

這是引用變量的短期方式不同。但是它的確與衆不同串聯輸出時:

%let var = My name ; 

%put &var.is Paul; 
// Output: My name is Paul. 

%put &varis Paul; 
// Output: WARNING: Apparent symbolic reference VARIS not resolved. 
// &varis Paul 

另一個例子,你肯定需要一個.

%let lib = sashelp; 
data temp; 
    set &lib..class; 
run; 

我會建議始終使用變種&variable.。因爲它很清楚變量的結束位置。

+0

非常感謝@zuluk。我試圖通過互聯網搜索,但無法找到這個區別 – ethan

+0

您需要使用術語「宏變量週期」進行搜索,只搜索「變量」將不會返回任何內容,因爲變量與宏變量不同。 – Reeza

3

當您引用宏變量時,&符號表示宏變量引用正在開始。宏處理器還需要確定宏變量引用的結束。

在大多數情況下,宏引用以空格或分號結尾。

38 %let x=Hello; 
39 
40 %put &x; *semicolon ends the reference; 
Hello 
41 
42 %put &x World; *white space ends the reference; 
Hello World 

宏變量名可以由字母,數字和下劃線組成。任何不能成爲宏變量一部分的符號都會結束引用。例如,一個問號:

44 %put &x?; *Question mark ends the reference; 
Hello? 

現在,假設你想生成字符串的HelloWorld,有你好與世界之間沒有空格:

46 %put &xWorld; 
WARNING: Apparent symbolic reference XWORLD not resolved. 
&xWorld 

這沒有奏效。宏處理器看到一個名爲xWorld的宏變量的引用,並且沒有這樣的宏變量。所以我們需要一種方法告訴宏處理器宏變量引用在x之後結束。我們可以在x之後添加一個句點,以表示「宏變量引用在此結束」。

47 %put &x.World; 
HelloWorld 

請注意,重要的是,我們鍵入的時間段並未顯示在寫入日誌的文本中。宏處理器「吃」它使用它作爲宏變量引用的結束的時間段。

這意味着,如果您希望在宏變量引用之後有一段時間,則必須鍵入兩個句點。第一個被宏處理器吃掉。通常的例子是使用libref:

48 %let mylib=sashelp; 
49 
50 proc print data=&mylib.class;run; 
ERROR: File WORK.SASHELPCLASS.DATA does not exist. 

NOTE: The SAS System stopped processing this step because of errors. 
51 
52 proc print data=&mylib..class;run; 

NOTE: There were 19 observations read from the data set SASHELP.CLASS. 

有些人喜歡在宏變量引用之後總是使用句點作爲編碼風格。就我個人而言,我只使用需要指定宏變量引用結束的時間段。