BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
yukixjxq2
Calcite | Level 5

xx.jpg

Dear all,

 

May I ask how to remove the title and words in red box above, e.g. "Stratum 1: _trt = 2", "for _trt=2"? It's the results of PROC LIFETEST. Please refer to my code below.

 

ods noptitle;

proc lifetest data=km1 plots=survival(atrisk=0 to 30 by 1 test) alphaqt=0.05 missing;
  by RAS_1C;
  time eevaluem*eventn(0);
  strata _trt;
run;

 

Thanks in advance,

Ke

1 ACCEPTED SOLUTION

Accepted Solutions
WarrenKuhfeld
Ammonite | Level 13

You can suppress titles and do lots of cool output manipulations by using the ODS document.  In my tutorials, I always say that if you don't know about the ODS document, you should.  Cool stuff.

 

ods document name=MyDoc (write);
ods graphics on;
proc lifetest data=sashelp.bmt plots=survival(strata=individual);
   time T * Status(0);
   strata Group;
run;

ods document close;

proc document name=MyDoc;
   list / levels=all;
quit;

proc document name=MyDoc;
   obstitle \Lifetest#1\Stratum1#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum1#1\SurvivalPlot#1;
   obstitle \Lifetest#1\Stratum2#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum2#1\SurvivalPlot#1;
   obstitle \Lifetest#1\Stratum3#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum3#1\SurvivalPlot#1;
quit;

View solution in original post

6 REPLIES 6
PeterClemmensen
Tourmaline | Level 20

You could use PROC TEMPLATE and change the underlying template of the KM plot like @WarrenKuhfeld demonstrates in various places. 

 

However, I think that is a bit overkill in this situation. I think the easiest here is to retrieve the underlying data of the KM plot and draw the plot with PROC SGPLOT to control the title yourself. I have posted an example of doing so below from the PROC LIFETEST documentation. It should be applicable to your problem as well.

 

data VALung;
   drop check m;
   retain Therapy Cell;
   infile cards column=column;
   length Check $ 1;
   label SurvTime='Failure or Censoring Time'
      Kps='Karnofsky Index'
      DiagTime='Months till Randomization'
      Age='Age in Years'
      Prior='Prior Treatment?'
      Cell='Cell Type'
      Therapy='Type of Treatment'
      Treatment='Treatment Indicator';
   M=Column;
   input Check $ @@;
   if M>Column then M=1;
   if Check='s'|Check='t' then input @M Therapy $ Cell $ ;
   else input @M SurvTime Kps DiagTime Age Prior @@;
   if SurvTime > .;
   censor=(SurvTime<0);
   SurvTime=abs(SurvTime);
   Treatment=(Therapy='test');
   datalines;
standard squamous
 72 60  7 69  0   411 70  5 64 10   228 60  3 38  0   126 60  9 63 10
118 70 11 65 10    10 20  5 49  0    82 40 10 69 10   110 80 29 68  0
314 50 18 43  0  -100 70  6 70  0    42 60  4 81  0     8 40 58 63 10
144 30  4 63  0   -25 80  9 52 10    11 70 11 48 10
standard small
 30 60  3 61  0   384 60  9 42  0     4 40  2 35  0    54 80  4 63 10
 13 60  4 56  0  -123 40  3 55  0   -97 60  5 67  0   153 60 14 63 10
 59 30  2 65  0   117 80  3 46  0    16 30  4 53 10   151 50 12 69  0
 22 60  4 68  0    56 80 12 43 10    21 40  2 55 10    18 20 15 42  0
139 80  2 64  0    20 30  5 65  0    31 75  3 65  0    52 70  2 55  0
287 60 25 66 10    18 30  4 60  0    51 60  1 67  0   122 80 28 53  0
 27 60  8 62  0    54 70  1 67  0     7 50  7 72  0    63 50 11 48  0
392 40  4 68  0    10 40 23 67 10
standard adeno
  8 20 19 61 10    92 70 10 60  0    35 40  6 62  0   117 80  2 38  0
132 80  5 50  0    12 50  4 63 10   162 80  5 64  0     3 30  3 43  0
 95 80  4 34  0
standard large
177 50 16 66 10   162 80  5 62  0   216 50 15 52  0   553 70  2 47  0
278 60 12 63  0    12 40 12 68 10   260 80  5 45  0   200 80 12 41 10
156 70  2 66  0  -182 90  2 62  0   143 90  8 60  0   105 80 11 66  0
103 80  5 38  0   250 70  8 53 10   100 60 13 37 10
test squamous
999 90 12 54 10   112 80  6 60  0   -87 80  3 48  0  -231 50  8 52 10
242 50  1 70  0   991 70  7 50 10   111 70  3 62  0     1 20 21 65 10
587 60  3 58  0   389 90  2 62  0    33 30  6 64  0    25 20 36 63  0
357 70 13 58  0   467 90  2 64  0   201 80 28 52 10     1 50  7 35  0
 30 70 11 63  0    44 60 13 70 10   283 90  2 51  0    15 50 13 40 10
test small
 25 30  2 69  0  -103 70 22 36 10    21 20  4 71  0    13 30  2 62  0
 87 60  2 60  0     2 40 36 44 10    20 30  9 54 10     7 20 11 66  0
 24 60  8 49  0    99 70  3 72  0     8 80  2 68  0    99 85  4 62  0
 61 70  2 71  0    25 70  2 70  0    95 70  1 61  0    80 50 17 71  0
 51 30 87 59 10    29 40  8 67  0
test adeno
 24 40  2 60  0    18 40  5 69 10   -83 99  3 57  0    31 80  3 39  0
 51 60  5 62  0    90 60 22 50 10    52 60  3 43  0    73 60  3 70  0
  8 50  5 66  0    36 70  8 61  0    48 10  4 81  0     7 40  4 58  0
140 70  3 63  0   186 90  3 60  0    84 80  4 62 10    19 50 10 42  0
 45 40  3 69  0    80 40  4 63  0
test large
 52 60  4 45  0   164 70 15 68 10    19 30  4 39 10    53 60 12 66  0
 15 30  5 63  0    43 60 11 49 10   340 80 10 64 10   133 75  1 65  0
111 60  5 64  0   231 70 18 67 10   378 80  4 65  0    49 30  3 37  0
;

ods graphics on;
proc lifetest data=VALung plots=(s,ls,lls) outtest=Test maxtime=600;
   time SurvTime*Censor(1);
   id Therapy;
   strata Cell;
   test Age Prior DiagTime Kps Treatment;
   ods output SurvivalPlot=Survivalplot;
run;
ods graphics off;

title "Whatever Title You Want";
proc sgplot data=SurvivalPlot;
   step x=Time y=Survival / group=Stratum;
   scatter x=Time y=Censored / markerattrs=(symbol=plus);
run;
title;
yukixjxq2
Calcite | Level 5

Many thanks. Yes, it's the easiest way to use sgplot or template+sgrender. However, my manager insist use plots statement in proc lifetest ...  >_<

 

I noticed that if there are 2 strata, "Stratum 1: _trt = 2" will not display. As shown below, it's generated using the same code but for another BY group. Are the different default templates were used for single group and multiple groups? If yes, may I ask what's the names of the 2 different templates?

2.jpg

WarrenKuhfeld
Ammonite | Level 13

https://go.documentation.sas.com/?docsetId=statug&docsetTarget=statug_kaplan_sect017.htm&docsetVersi...

 

Once you learn to use the techniques in this example, you will find it easy to make all kinds of modifications.

yukixjxq2
Calcite | Level 5

Thank you so much! The document you provided is very helpful! Base on it, I have successfully updated the title and almost every element of the KM plot. There is still only one issue left. How to remove "Stratum 1: _trt = 2" in the first KM plot? I noticed it only occurred in single-stratum case. But I could not find any definition about it in the template Stat.Lifetest.Graphics.ProductLimitSurvival. I use "ods trace on;" to check the two KM plots. The same template was used. The only difference is in Path. There is a "Stratum1." in the Path of first single-stratum plot. Is there any way to remove "Stratum 1: _trt = 2" from the single-stratum plot?

q1.jpgq2.jpg

Output Added:
-------------
Name:       SurvivalPlot
Label:      Survival Curve
Template:   Stat.Lifetest.Graphics.ProductLimitSurvival
Path:       Lifetest.ByGroup1.Stratum1.SurvivalPlot
-------------
NOTE: The homogeneity tests across strata were omitted since there is only one stratum.
NOTE: The above message was for the following BY group:
       HRAS/KRAS/NRAS Missense Status=HRAS/KRAS/NRAS - Missense Mutation Detected
 
Output Added:
-------------
Name:       SurvivalPlot
Label:      Survival Curves
Template:   Stat.Lifetest.Graphics.ProductLimitSurvival
Path:       Lifetest.ByGroup2.SurvivalPlot
-------------
NOTE: The above message was for the following BY group:
       HRAS/KRAS/NRAS Missense Status=HRAS/KRAS/NRAS - Missense Mutation not Detected
NOTE: PROCEDURE LIFETEST used (Total process time):
       real time           0.54 seconds
       cpu time            0.19 seconds
WarrenKuhfeld
Ammonite | Level 13

You can suppress titles and do lots of cool output manipulations by using the ODS document.  In my tutorials, I always say that if you don't know about the ODS document, you should.  Cool stuff.

 

ods document name=MyDoc (write);
ods graphics on;
proc lifetest data=sashelp.bmt plots=survival(strata=individual);
   time T * Status(0);
   strata Group;
run;

ods document close;

proc document name=MyDoc;
   list / levels=all;
quit;

proc document name=MyDoc;
   obstitle \Lifetest#1\Stratum1#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum1#1\SurvivalPlot#1;
   obstitle \Lifetest#1\Stratum2#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum2#1\SurvivalPlot#1;
   obstitle \Lifetest#1\Stratum3#1\SurvivalPlot#1;
   replay \Lifetest#1\Stratum3#1\SurvivalPlot#1;
quit;

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 6 replies
  • 2374 views
  • 0 likes
  • 3 in conversation