我正在瀏覽SAS代碼,發現引用宏變量的下列方法。引用已定義的宏變量
- & 變量名。
- & 變量名
我知道引用的第一種方式是我們如何指的是SAS定義的宏變量的正常方式。
但是,請你解釋一下如何做第二種方式(不包括宏變量名後段)是從第一種方式
我正在瀏覽SAS代碼,發現引用宏變量的下列方法。引用已定義的宏變量
我知道引用的第一種方式是我們如何指的是SAS定義的宏變量的正常方式。
但是,請你解釋一下如何做第二種方式(不包括宏變量名後段)是從第一種方式
這是引用變量的短期方式不同。但是它的確與衆不同串聯輸出時:
%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.
。因爲它很清楚變量的結束位置。
當您引用宏變量時,&符號表示宏變量引用正在開始。宏處理器還需要確定宏變量引用的結束。
在大多數情況下,宏引用以空格或分號結尾。
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.
有些人喜歡在宏變量引用之後總是使用句點作爲編碼風格。就我個人而言,我只使用需要指定宏變量引用結束的時間段。
注意這些是宏變量引用。要引用一個變量,你只需使用它的名字。 – Tom