基本上,在執行macro程序時,需要一一宣告巨集變數
如:想針對問卷中的性別及年齡變項進行單變項的邏輯斯迴歸
可以先建立一段執行邏輯斯迴歸分析的macro程序,假設命名為logistic
接著以「%logistic(SEX);」和「%logistic(AGE);」來宣告要執行的變項名稱
但當要分析的變項很多時,key這些巨集變數就變得是件很麻煩的事,且還可能不小心key錯
不過,若已經有一份欲分析的變項清單時,整件事就會變得很簡單了~~

再以分析健保資料庫為例
計算1996-2001年門診檔中每人最早糖尿病及高血脂症的門診日期及各自的總門診次數
但需排除就診科別為牙科及中醫科的資料
這樣的狀況題,可以寫兩段分別針對糖尿病及高血脂症的macro程序,如下:

執行後,會產出三個檔案,分別是暫存檔temp,及兩個疾病的分析結果檔dm和hld
程式不長,暫存檔也不多,似乎是可以接受的
但,當要分析的疾病變多時,這樣的寫法似乎又不太聰明,程式也會變得又臭又長
在這兩段macro程序中,只有疾病的診斷代碼不同及最後產出的檔名不同,其餘都一樣
所以,若已經有一份各種疾病診斷代碼的清單
就可以利用SQL中的INTO statement來分別建立疾病與診斷代碼的巨集變數
因此整個程式可以改寫成:

一開始先建立一個有各種疾病診斷代碼的檔案,包含疾病名(DISEASE)及診斷代碼(CODE)兩個變項
接著重點是利用SQL的INTO statement將這兩個變項內的數值設為巨集變數
即disease1, disease2和code1, code2
然後可以利用%put statement的功能,在log視窗查看這些巨集變數所代表的內容是什麼

如此一來,我們便完成巨集變數的宣告
再修改一下原本的macro內容,並且新增一個欄位(DISEASE)來判斷每筆資料是符合糖尿病或高血脂症定義
在執行後,result檔就會是所有疾病的結果

 

延申閱讀:

【SAS】使用ODS整理分析結果
【SAS】資料歸戶
【SAS】使用macro重複執行特定程序
【SAS】在macro中自動累加檔案

 

arrow
arrow

    rover1023 發表在 痞客邦 留言(0) 人氣()