[SAS] macro_macro變數的基本觀念

沉寂好久的macro記錄總算重出江湖(誤)

macro變數 (macro variables)則是SAS macro內最最基本的元素

因此有必要來了解他的特性,才能靈活的作運用

Macro變數有甚麼特性?

(1) 可以存在於SAS program的任何一處

比方說在Data step、Proc step、甚至是SCL裡面都可以使用或是調整

(2) 可以出現在Macro程式外面

這樣的macro變數又稱做open code

(3) Macro變數可以由SAS或是使用者的程式創造

之前文章提過可分作automatic macro變數、user-defined macro變數。

而Auto的macro變數例如SAS的時間日期、SAS系統版本,基本上都是恆定不可改變的值。那些使用者自訂的macro變數當然可以在任何一處程式定義使用。

(4) Macro變數儲存地可分為global symbol table與local symbol table

簡單說,在open code創造的macro變數屬於global;而在program內出現的有可能屬於global或local。例如…

%let reptitle=Book section;/*用%let來創造macro變數*/
%let repvar=section;

title “Frequencies by &reptitle as of &sysday“;/*用&來告訴SAS這是macro變數,其中sysday就是SAS內建的macro變數*/
proc freq data=books.ytdsales;
   tables &repvar;/*這裡插入之前創造的macro變數&repvar*/
run;

附註:上述出現的3個macro變數就是所謂的open code,可以隨處使用除非你另外改變她。

(5) Macro變項內的值皆為text value(文字值)

文字值當然包括數字,因此在macro program內如果想做數學計算,必須告知SAS該為數字、給既定的函數作運算。

另一方面macro變數所吃的文字,如果一開始就是小寫、之後也會是小寫:混搭的也還是混搭(混搭即該值內大小寫文字皆存在)。

而且macro變數在被丟入symbol table的時候,除非有額外設定(函數)把這些空白偽裝一下,頭尾的空白值會被砍掉。

(6) Macro變數的命名需為有效命名才可以使用

之前就提過,如果命名的規則與SAS內建的,比方說函數、其他既定名稱衝突,該命名就會無效。例如SCANRUNCLOSESYSDAY等…

(7) Macro變數與Dataset資料內的變數大相逕庭

雖然都叫做variables(變數),不過勒~她們兩個差很遠。Dataset裡面的變項可能對應很多值,比方說組別可能就分3種、疾病就有12種。

在Macro變數裡面不會存在這樣的事情→only one value。

待續…

參考資料:SAS Macro Programming Made Easy, Second Edition

終於又開始寫macro變數了!好的開始~

Share


One Response to “[SAS] macro_macro變數的基本觀念”

  1.   carl Says:

    整理得很清楚呢!!

    對入門的使用者來說,macro variable和variable,是很容易搞混的。

留言回覆

CAPTCHA 驗證圖片 CAPTCHA Audio
更換一張圖片

Since 2010 total of 463303 visits