Dear
I would like to customize the Kaplan-Meier graph by removing the default title “Product-Limit Survival Estimates with Number of Subjects at Risk.” Is it possible to do this directly ?
Should I modify the survival/failure template to achieve this, or is there another recommended approach?
thanks in advance for any help
Before I retired, I wrote an entire chapter on modifying the survival plot. I hope you find it helpful.
https://support.sas.com/documentation/onlinedoc/stat/151/kaplan.pdf
Try the following SAS Note:
Dear,
Thank you for your helpful note.
I’ve read and tried to apply the SAS guidance you shared. Unfortunately, I’m unable to execute the %grtitle(...) command due to insufficient authorization.
As an alternative, I proceeded to modify the Kaplan-Meier template directly. However, I’m still encountering an issue: the default title “Number of Subjects at Risk” continues to appear in the graph
despite having updated the relevant section of the template as follows:
%if &ntitles gt 1 %then %do;
%if not &outside %then if (PLOTATRISK=1);
entrytitle "" /
textattrs=GRAPHVALUETEXT;
%if not &outside %then %do; endif; %end;
%end;
The title still appears as shown in the screenshot I posted.
Do you have any suggestions on how to fully suppress or remove it?
Thanks again for your support!
Best regards,
Before I retired, I wrote an entire chapter on modifying the survival plot. I hope you find it helpful.
https://support.sas.com/documentation/onlinedoc/stat/151/kaplan.pdf
Thank you very much for your help. I’ve found a solution for the survival analysis. In the coming days, I’ll look into the failure analysis as well, and I hope I’ll be able to make it work.
Glad I could help. The macros provided in the chapter only work to modify the survival plot. If you want to modify the failure plot, you have to modify the template.
For the survival plot, there were two templates. You might have been modifying the wrong one, which might be why your first approach did not work. I did not check your work, but keep that in mind if you ever need to modify the template. I suspect there are two failure-plot templates, but again, I did not check. I always used trace output to tell me which template to modify.
Another possibility, which will also give you control over things like the range of the y-axis and most other customizations is to output the survival dataset by adding the OUTSURV= option to the PROC LIFETEST statement. You'll then be able to plot things with PROC SGPLOT or similar. That said, you will then be doing everything from scratch, including adding text for the log rank / wilcoxon to the plot, displaying censored values, etc., so if you truly only want control over the title, definitely go with the response above this one.
Actually ,you could save these data from PROC LIFETEST and plot it again by PROC SGPLOT.
Here is a example for SURVIVAL and FAILURE plot:
proc format;
value grpLabel 1='ALL' 2='AML low risk' 3='AML high risk';
run;
data BMT;
input DIAGNOSIS Ftime Status Gender@@;
label Ftime="Days";
format Diagnosis grpLabel.;
datalines;
1 2081 0 1 1 1602 0 1
1 1496 0 1 1 1462 0 0
1 1433 0 1 1 1377 0 1
1 1330 0 1 1 996 0 1
1 226 0 0 1 1199 0 1
1 1111 0 1 1 530 0 1
1 1182 0 0 1 1167 0 0
1 418 2 1 1 383 1 1
1 276 2 0 1 104 1 1
1 609 1 1 1 172 2 0
1 487 2 1 1 662 1 1
1 194 2 0 1 230 1 0
1 526 2 1 1 122 2 1
1 129 1 0 1 74 1 1
1 122 1 0 1 86 2 1
1 466 2 1 1 192 1 1
1 109 1 1 1 55 1 0
1 1 2 1 1 107 2 1
1 110 1 0 1 332 2 1
2 2569 0 1 2 2506 0 1
2 2409 0 1 2 2218 0 1
2 1857 0 0 2 1829 0 1
2 1562 0 1 2 1470 0 1
2 1363 0 1 2 1030 0 0
2 860 0 0 2 1258 0 0
2 2246 0 0 2 1870 0 0
2 1799 0 1 2 1709 0 0
2 1674 0 1 2 1568 0 1
2 1527 0 0 2 1324 0 1
2 957 0 1 2 932 0 0
2 847 0 1 2 848 0 1
2 1850 0 0 2 1843 0 0
2 1535 0 0 2 1447 0 0
2 1384 0 0 2 414 2 1
2 2204 2 0 2 1063 2 1
2 481 2 1 2 105 2 1
2 641 2 1 2 390 2 1
2 288 2 1 2 421 1 1
2 79 2 0 2 748 1 1
2 486 1 0 2 48 2 0
2 272 1 0 2 1074 2 1
2 381 1 0 2 10 2 1
2 53 2 0 2 80 2 0
2 35 2 0 2 248 1 1
2 704 2 0 2 211 1 1
2 219 1 1 2 606 1 1
3 2640 0 1 3 2430 0 1
3 2252 0 1 3 2140 0 1
3 2133 0 0 3 1238 0 1
3 1631 0 1 3 2024 0 0
3 1345 0 1 3 1136 0 1
3 845 0 0 3 422 1 0
3 162 2 1 3 84 1 0
3 100 1 1 3 2 2 1
3 47 1 1 3 242 1 1
3 456 1 1 3 268 1 0
3 318 2 0 3 32 1 1
3 467 1 0 3 47 1 1
3 390 1 1 3 183 2 0
3 105 2 1 3 115 1 0
3 164 2 0 3 93 1 0
3 120 1 0 3 80 2 1
3 677 2 1 3 64 1 0
3 168 2 0 3 74 2 0
3 16 2 0 3 157 1 0
3 625 1 0 3 48 1 0
3 273 1 1 3 63 2 1
3 76 1 1 3 113 1 0
3 363 2 1
;
run;
ods select none;
ods output SurvivalPlot=SurvivalPlot;
proc lifetest data=bmt plots=(survival);
time ftime*Status(0);
strata diagnosis;
run;
ods select all;
title;
ods graphics /ATTRPRIORITY=none;
proc sgplot data=SurvivalPlot;
styleattrs DATASYMBOLS=(plus diamond X);
step x=Time y=Survival / group=Stratum lineattrs=(pattern=solid) name='x' ;
scatter x=Time y=Censored / group=Stratum ;
legenditem name='a' type=MARKERLINE / label='ALL' MARKERATTRS=graphdata1(symbol=plus) LINEATTRS=graphdata1;
legenditem name='b' type=MARKERLINE / label='AML high risk' MARKERATTRS=graphdata2(symbol=diamond) LINEATTRS=graphdata2;
legenditem name='c' type=MARKERLINE / label='AML low risk' MARKERATTRS=graphdata3(symbol=X) LINEATTRS=graphdata3;
keylegend 'a' 'b' 'c' / across=1 location=inside position=ne ;
keylegend 'x';
run;
/************************************生存曲线 核心语句****************************************/
/*生存曲线 向下 死亡曲线 向上*/
ods select none;
ods output FailurePlot=FailurePlot;
*(atrisk=0 to 960 by 60) 这个也是弄
下面表格 和下面的天数相对应;
proc lifetest data=FAS plots=survival(failure atrisk=0 to 35 by 5);;
time day*remy(1);
strata treat_char;
run;
ods select all;
/************************************出图 ****************************************/
ods html;
ods listing gpath="&path." style=htmlblue image_dpi=300;/*这一段是将html的结果存成图片*/
ods graphics /ATTRPRIORITY=none noborder reset=index imagename='failure';/*给图片命名为failure sas默认为png reset=index为不更改图片的名字*/
proc sgplot data=FailurePlot;
styleattrs DATASYMBOLS=(plus X) DATACONTRASTCOLORS=(blue red );
step x=Time y=_1_SURVIVAL_ / group=Stratum lineattrs=(pattern=solid) name='x' ;
scatter x=Time y=_1_CENSORED_ / group=Stratum ;
legenditem name='a' type=MARKERLINE / label='对照组' MARKERATTRS=(symbol=plus color=blue) LINEATTRS=(color=blue);
legenditem name='b' type=MARKERLINE / label='试验组' MARKERATTRS=(symbol=X color=red) LINEATTRS=(color=red);
*这一行 是用来 弄下面表格的;
xaxistable atrisk / x=tatrisk class=stratum colorgroup=stratum valueattrs=(weight=bold);
xaxis values=(0 to 35 by 5) label='天数';
yaxis values=(0 to 1 by 0.1) label='改善临床状态概率';
keylegend 'a' 'b' / across=1 location=inside position=se title='组别' ;
/*keylegend 'x';*/
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Check out this tutorial series to learn how to build your own steps in SAS Studio.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.