之前在幫長庚護理系的葉昭幸教授作一些資料分析時,曾經寫了一個 macro 以便於將 PROC FREQ 的結果拿來製造 82 個資料集。因此這個 macro 就跑了 82 次。今天我把這個程式拿來看一看,覺得有點 stupid。心想如果有更方便的方法來讓 macro 可以自動重複的把 PROC procedure 跑完的話,那就更完美了。 因此,上網路稍微搜尋一下,馬上找到答案。原始的 stupid 程式如下: %macro variable(var,outdata); proc freq data=symptom.msas noprint; tables &var /out=&outdata; run; data &outdata; set &outdata; drop &var percent; rename count=&var; run; %mend; /*Distress*/ %variable(distress1, symptom.distress1); ... ... ...(省略) %variable(distress30, symptom.distress30); /*Severity*/ %variable(severity1, symptom.severity1); ... ... ...(省略) %variable(severity30, symptom.severity30); /*Freq*/ %variable(freq1, symptom.freq1); ... ... ...(省略) %variable(freq22, symptom.freq22); 後來改成這樣: %macro variable(var,num); %do i = 1 %to # proc freq data=symptom.msas noprint; tables &var&i /out=&var&i; run; data &var&i; set &var&i; drop &var&i percent; rename count=&var&i; run; %end; %mend; %variable(distress,30); %variable(severity,30); %variable(freq,22); 主要修改的地方有兩個: 一、把原本要存入symptom這個library的檔案全部改存到work裡面去,這樣這些暫存的檔案在經過下一步驟的合併之後並離開SAS後就會消失,不會佔用硬碟空間。 二、在 PROC FREQ 和 data step 外面加上一個 do loop,然後把要執行的圈數設成一個新的 macro 參數叫做 num,這樣就能拿來控制要重複執行的次數。

文章標籤
全站熱搜
創作者介紹
創作者 cchien 的頭像
cchien

ToTo 奇妙の冒險

cchien 發表在 痞客邦 留言(4) 人氣(499)