BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
ChiSAS25
Fluorite | Level 6

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?

ChiSAS25_0-1760700907505.png

thanks in advance for any help

 

1 ACCEPTED SOLUTION

Accepted Solutions
WarrenKuhfeld
Ammonite | Level 13

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

View solution in original post

7 REPLIES 7
ChiSAS25
Fluorite | Level 6

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

ChiSAS25_0-1760957900783.png

 

 

 

 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,

WarrenKuhfeld
Ammonite | Level 13

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

ChiSAS25
Fluorite | Level 6

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.

WarrenKuhfeld
Ammonite | Level 13

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. 

quickbluefish
Barite | Level 11

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.  

Ksharp
Super User

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;

Ksharp_0-1761011974186.png

 

 

 

 

 

/************************************生存曲线 核心语句****************************************/
/*生存曲线  向下   死亡曲线 向上*/

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;

Ksharp_1-1761012045597.png

 

Creating Custom Steps in SAS Studio

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 7 replies
  • 731 views
  • 2 likes
  • 5 in conversation