延續上一篇文章的狀況,但改利用門診檔計算:
若要計算1996-2001年門診檔中每人最早的糖尿病門診日期及糖尿病總門診次數
並只保留門診次數大於等於2者,且需排除就診科別為牙科及中醫科的資料
macro程式會是:

執行後會產出dm1996, dm1997 至 dm2001,共6個暫存檔,每個檔案是每個年度的計算結果
接著再用set statement合併,就會是1996-2001年的最後結果了,即:
    data dm;
   
set dm1996 dm1997 dm1998 dm1999 dm2000 dm2001;
   
run;

雖然macro大大減少了撰寫程式的負擔,但依舊會產出不少暫存檔
當分析的年度越拉越長時,暫存檔的數量也就跟著增加,也間接壓縮到能利用的硬碟空間
所以,是否能優化這macro程式,讓每個年度的計算結果能自動累加以減少暫存檔的數量呢??
有的!!不囉嗦,先看看程式長什麼樣子

執行後只會有產出兩個暫存檔,一個是temp,一個是dm,而dm就會是1996-2001年的最後結果
且不管分析的年度有多少,都只會產出這兩個暫存檔,是不是很實用!!

程式解說:
一開始先建立一個空的檔案dm,是用來儲存後續計算的結果
接著macro從1996年的資料開始進行分析,並把計算結果輸出到暫存檔temp中
暫存檔temp再與檔案dm合併,此時檔案dm是1996年的結果
接著macro又讀入1997年的資料進行分析,也把計算結果覆寫到暫存檔temp
暫存檔temp又再與檔案dm合併,此時的檔案dm是1996年+1997年的結果
持續這樣的迴圈直到完成2001年的計算,這時的檔案dm就會是1996-2001年的最後結果了~~~~

 

延申閱讀:

【SAS】使用ODS整理分析結果
【SAS】資料歸戶
【SAS】使用macro重複執行特定程序

 

文章標籤
創作者介紹

凡走過必留下痕跡~~~

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