[SAS] Macro Variable 巨集變數 – II

Posted: 17 三月, 2014 by Chris Lin in Biostatistics/SAS/Python

上篇, 與local macro variable不同, global macro variable在程式的任何位置, 都有意義. 我們隨時可將其呼叫出來使用.

例如說, 我們常會碰到報表的輸出, 需要在其Title後面加註個 “(N=xx)". 當資料的筆數隨時在更新, 我們便會希望程式可在每次輸出統計結果時, 自動去判斷最新dataset中包含的筆數. 以下, 我們透過兩種方式, 將某dataset的筆數 ‘存放’ 進macro variable.  

/*方法1*/ data _NULL_; set _INCI end = eof;
if eof then call symputx(‘No’, _N_);
if eof then call symput(‘Last_Name’, ID_Name);
run;

因為我們只是要算資料的筆數, 故可建立一個"不存在 (_NULL_)"的dataset, 並且指定, 達到資料末端時 (end), 把它叫做eof.
_N_ 為SAS內建, 可告訴我們每筆資料為該dataset中的第 幾 筆data.
call symputx可將括號內, 第二個位置的數值, ‘存放’ 到第一個位置的巨集變數中.
若欲存放之內容為’文字’而非’數值’時, 應使用call symput.

接下來, 我們可將這兩個巨集變數呼叫出來看看是否正確:
%put &No;
%put &Last_Name;
可至log視窗看到結果.

/*方法2*/ proc sql noprint;
select count(ID) into: No2 from _INCI;
quit;

此方法將ID欄位不為missing的資料筆數, 存放到 No2這個巨集變數. 接下來, 還是一樣可將變數呈現出來看看 %put &NO2;

最後, 我們便可在統計報表的Title中, 善用一下剛剛建立的巨集變數, ex:
titleDistribution of Baseline Characteristics in HTN Kids (N=&No)“;

屆時, 報表的Title就會是 Distribution of…..(N=100) 之類的~
注意, 因為這串title裡面包含巨集變數, 故須使用 “雙引號" 包起文字.

另外, SAS還有內建許多global macro variables, &SYSDATE9 常可用來放在報表的footnote, 以顯示輸出的日期.

發表留言