[SAS] 利用PROC GPLOT繪製存活曲線

Posted: 11 二月, 2014 by Chris Lin in Biostatistics/SAS/Python

以下兩個存活曲線圖; 左圖為透過proc lifetest直接產出, 右圖則為proc gplot的結果.

SurvivalPlot32

gplot65

proc lifetest的語法簡潔又方便, 但當我們希望對圖的內容作調整時 (ex: 曲線的色彩/樣式, reference line, etc.), proc gplot 將容易許多.

首先, 還是透過proc lifetest將life table(生命表)的數值output出來 (以下存成 LTEstimates dataset).
proc lifetest data = LifeTest outsurv = LTEstimates;
time FollowTime * Censor(1);
strata TX;
quit;

如果僅針對LTEstimates中的存活機率作圖, 將會只有曲線部分, 沒有censor的標記. 因此, 可新增另一個variable (ex: CensorTime)來存放 “發生censor時間點之存活機率." (<–以便之後在這些機率的位置做標記)
data LifeGraph; set LTEstimates;
if _CENSOR_ = 1 then CensorTime = SURVIVAL;
run;

接下來, 僅需在gplot底下, 對兩組的存活機率畫線 (plot1), 並在發生censor的位置做記號 (plot2).
由於一次處理兩個plot, SAS會自動呈現左右兩邊的Y軸. 因此, 需先對兩個Y軸做設定, 讓圖僅出現左邊的Y軸就好 (如下方之 axis1, axis2 (所有的呈現皆=none, 即可把第二縱座標軸藏起來)). 至於X軸, 則可使用axis3來設定.
在symbol的部分, 我們需要兩種線條及兩種符號 (ex: 三角形 & 方形). 故一共會有 symbol1~symbol4.

goptions reset = all cback=white border htext=12pt htitle=14pt;
title ‘Survival Status Since Treatment Initiation Between Groups’;
axis1 order = (0 to 1 by 0.1) minor = none label = (angle = 90 ‘Survival Probability’ );
axis2 order = (0 to 1 by 0.1) label=none value=none major=none minor=none;
axis3 order = (0 to 25 by 5) minor = (number =4);
legend1 label=(‘Treatmenet: ‘) frame ;

symbol1 Interpol=Stepj Line=1 Width=1.5 color=VIYG;
symbol2 Interpol=Stepj Line=2 Width=1.5 color=black;
symbol3 Height=1.5 value=Triangle color=VIYG;
symbol4 Height=1.5 value=Square color=black;

proc gplot data = LifeGraph;
plot1 SURVIVAL*FollowTime = TX/vaxis = axis1 haxis = axis3 legend=legend1;
plot2 CensorTime * FollowTime = TX/vaxis = axis2 nolegend;
label TX = ‘Treatment’;
label FollowTime = ‘Follow-up Time (month)’;
format TX TxF.;
run;
quit;

———
另外, SAS內建了一些註解 (annotate)功能. 可在圖中的任一位置畫線/加註文字等.
欲使用這些功能, 僅需建立一個新的annotate dataset (如下之 KMGraphAnno), 並呼叫內建的 %ANNOMAC;.

data KMGraphAnno;
xsys=’2′; ysys=’2′;
%ANNOMAC;
/*箭頭*/%ARROW(11,0.4,13.5,0.48,VIYG,1,1,75,’FILLED’);
/*文字*/%LABEL(10,0.35,’Enter Text’,VIYG,0,0,1.5,ARIAL,2);
/*線條*/%LINE(0, 0.75, 25, 0.75, VIOY, 3,1);
run;

接著, 在原先的proc gplot中, 加上這個annotate dataset. 完成!

proc gplot data = LifeGraph anno = KMGraphAnno;
plot1 …

quit;

ps1. SAS內建線條/符號的樣式.
ps2. 各種顏色的代號.

發表留言