若研究者想做一張單變項的回歸分析表, 當要看的影響因子愈多, 要進行的單變項回歸分析次數愈多, 於是要反覆執行很多的model, 透過巨集指令功能,即能快速執行完所有的model

    以下同樣要介紹SAS的巨集指令, 以及搭配ODS(Output Delivery System)功能, 以快速產生COX-REGRESSION的統計表格

   如果研究者想看某族群的環境污染劑量與癌症的關係,於是進行劑量效應關係分析(DOSE-RESPONSE EFFECT),並利用在圖表中的範例資料進行分析, 該檔有幾個主要變項:stdno (研究序號), gender (性別), inage(開始曝露於環境污染源的年齡), foloow_up(觀查時間:), dose (環境污染物的劑量), ca1-ca22(各種癌症的欄位名稱, 且欄位中的1為有發生, 0為未發生)。(僅呈現10筆)


 Cox-regression  


[程式一]將以Call symput( )函數產生巨集參數, [程式二]將套用參數跑完所有的多變項迴歸。

[
程式一]

data _null_;
input var $ text $;
call symput(var,text);
cards;
VAR1 CA1
VAR2 CA2
VAR3 CA4
VAR4 CA6
VAR5 CA7
VAR6 CA8
VAR7 CA9
VAR8 CA10
VAR9 CA11
VAR10 CA12
VAR11 CA13
VAR12 CA14
VAR13 CA16
VAR14 CA17
VAR15 CA20
VAR16 CA21
VAR17 CA22
;
run;
%put _user_;


    產生一個暫存檔 _NULL_, 放入兩個變項, VARTEXT VAR變數下的參數為VAR1~VAR17, TEXT變數下放入各個MODEL的癌症變數(CA1~CA22)call symput(var,text)函數將VARTEXT兩變數作了一個聯結, 使 TEXT內的參數對應到VAR的參數, 例如VAR1對應到CA1, VAR2對應到CA2..., 其他以此類推, _NULL_檔的資料建立好, 再以%put _user_指令將內容輸出到LOG視窗。

[
程式二]

    以下程式利用call symput(var,text)所建立好的對應, 將每個MODEL的癌症變數套用進來。首先以%MACRO 宣告將執行一段局部的巨集指令(LOCAL MACRO), MACRO NAMEDATA, 括號內的X, var為參數, 解釋變數寫成&&var&x, 巨集指令會由內向外解開, 於是先解開 &var&x, 當外部迴圈的x跑到1, 解開即為var1; 當外部迴圈的x跑到2, 解開即為var2,.......,其他以此類推, VAR1~VAR22都被解開。緊接著會解開&&var&x, &var1, &var2, &var3,.....&var22 &var1被解開, 即對應到TEXTCA1, &var2被解開, 即對應到TEXTCA2,...其他以此類推, 最後所有癌症變數都被對應上。

    外部迴圈是由LOOP中的參數X所控制, X 1跑到17, %DO- %TO- %END執行完成,LOOP是一個巨集名稱(MACRO NAME)

[
] Local macro%macro宣告執行, %mend宣告結束,同時要建立巨集名稱(MACRO NAME)以及巨集參數(PARAMETER)

/*-------Cox-regression---*//*Dose-Response Effect*/
/*--
各癌--*/
%macro data(x,var);
title "&&var&x";
proc phreg data=mydata;
model FOLLOW_UP*&&var&x(0) = gender inage dose/selection=none RISKLIMITS;
ods output parameterestimates=pp&x;
run;

data pp&x;
    set pp&x;
       ca=&x;
run;

%mend;
      %macro loop;
             %do x=1 %to 17;
                  %data(&x);
             %end;
        %mend;
        %loop

/*--
合併分析結果*/
Data qq;
Set pp1-pp17;
if Parameter='dose';
proc print data=qq;
Run;

[
輸出報表]

    以癌症CA12為例, CA12=1EVENT(發生CA12), CA12=0CENSORED(設限資料), 因觀察結束後仍未發病, 但不知未來是否會發病, 故定義為設限資料。在MODLE"="左邊放的是FOLLOW_UP與癌症變項, 兩者相乘, 17種癌症要執行17MODEL"="右邊為3個解釋變數, 分別是GENDER, INAGE, DOSE

selection=none RISKLIMITS
為採取所有的解釋變數全放入MODEL的模式, 並計算風險比值(Hazard Raio; HR)95%信賴區間。

ods output parameterestimates=pp&x;
將所有的參數估計量全輸出至檔案PP1~PP17各檔中。

Data qq;
    Set pp1-pp17;
    if Parameter='dose';
Run;

    PP1~PP1717檔合併起來, 並保留解釋變數: DOSE, 以觀察各個癌與環境污染源間的劑量效應關係。

[
表格內容 ]

    從表格內容中可知, CA=3, 10有劑量效應關係, 對應到癌症的欄位是CA4, CA12, p value皆小於0.05, 故推翻虛無假設, 而接受癌症與污染源間有劑量效應關係。CA4 p value0.0395, HR=1.002 (1.000-1.004), DOSE每增加1單位, 發生CA4這個癌的風險增加0.2%, 且有統計上的顯著意義,HR95% CI1.000-1.004

Cox-regression2  

arrow
arrow
    全站熱搜

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