[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內建的,比方說函數、其他既定名稱衝突,該命名就會無效。例如SCAN、RUN、CLOSE、SYSDAY等…
(7) Macro變數與Dataset資料內的變數大相逕庭
雖然都叫做variables(變數),不過勒~她們兩個差很遠。Dataset裡面的變項可能對應很多值,比方說組別可能就分3種、疾病就有12種。
在Macro變數裡面不會存在這樣的事情→only one value。
待續…
–
參考資料:SAS Macro Programming Made Easy, Second Edition
終於又開始寫macro變數了!好的開始~

1月 2nd, 2011 at 7:35 pm
整理得很清楚呢!!
對入門的使用者來說,macro variable和variable,是很容易搞混的。