『用ODS GRAPHICS和PROC LIFETEST繪製存活曲線圖 (Survival Curve)』從2010年以來已經有超過9千次的瀏覽量,雖然用ODS繪製Kaplan-Meier Survival Plot(後簡稱KM PLOT)非常方便,但缺點是如果需要修改圖中的樣式必須使用Graph Template Language(GTL)語法修改版模,不過GTL語法似乎真的有點難啊~~
還好SAS很佛心的提供一系列的Macro和Macro Variable可以方便使用者修改「部分」的圖形元素。但是這一系列的寫法有些複雜和不直覺,而且只能修改「Survival plot」而不支援「Failure plot」,如果你剛好需就讓我們一起學習看看吧!
先秀出經過修改後的KM PLOT。
《預設的KM PLOT》
首先,先繪製一張未修改的圖,程式如下:
ods select SurvivalPlot; |
結果如下圖:
針對原始圖,打算修改下列幾個部分,而每一部份的程式都會重複上一部份的內容。
1.圖的標題和副標題
2.圖例(Legend)的位置
3.修改同質性檢定說明文字框(Homogeneity Test Inset)的文字和樣式
4.Y軸和X軸的刻度值(Tick Value)和軸標題
5.增加Y軸的參考線(Reference Line)及修改存活曲線的顏色、樣式及設限(Censor)符號
在開始修圖前,先說明如何匯入巨集程式及使用規則。
《程式載入》
程式可以從透過兩種方式取得,第一種直接到SAS官網然後搜尋「Customizing the Kaplan-Meier Survival Plot」點取連結下載。第二種為直接在程式中下載,然後執行巨集程式。第二種的語法如下:
/*匯入Macrot程式*/ |
匯入Macro程式要修改的部分為「infile “XXXX”」後面的路徑和檔案名稱。
《程式架構》
%ProvideSurvivalMacros
修改圖形所需巨集程式或巨集變項
%CompileSurvivalTemplates
proc lifetest data ‥‥‥;
‥‥‥;
run;%ProvideSurvivalMacros
proc template;
delete Stat.Lifetest.Graphics.ProductLimitSurvival / store=sasuser.templat;
delete Stat.Lifetest.Graphics.ProductLimitSurvival2 / store=sasuser.templat;
run;
第一步:執行「%ProvideSurvivalMacros」到「%CompileSurvivalTemplate」之間要放入需要修改的巨集程式或巨集變項,需要注意的,這兩個語法後面『不需要分號』。
第二步:執行PROC LIFETEST。
第三步:再次執行%ProvideSurvivalMacros,及PROC TEMPLATE,可恢復預設的巨集程式及巨集變項,和刪除已經修改的版模,讓環境回到預設的狀況。
《1.修改標題和副標題》
修改標題需要用到4個巨集變項,包括
tatters可以設定字大小、字型和字體。
titletext0設定標題文字內容。
titletext1如圖的分層只有一層(或一條線)使用該巨集變項。
titletext2如分層為多層(或多條線)則使用此巨集變項。
其中tatters的用法比較特別,設定完成後要放到titletext1或titletext2的後面,別忘了「/」。
%ProvideSurvivalMacros
proc lifetest data=sashelp.BMT notable plots=survival( test atrisk(maxlen=13)); %ProvideSurvivalMacros /* 刪除已修改的templates. */ |
程式執行後的結果如下圖
《2.修改圖例(Legend)的位置》
修改圖例這裡使用了1個巨集變項。
LegendOpts其中autoalign可定圖例的位置,預設值為「outside」;across=1設定每一行只放一個圖例。
%ProvideSurvivalMacros |