BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ammarhm
Lapis Lazuli | Level 10

Hi everyone,

i am trying o edit the failure curve obtained from proc life, see the code below:

 

 

DATA Have;
   input id	os_censor Sex $ Age duration os progress $ trt $;
   LABEL os = 'Overall Survival (months)'
   	progress = 'Progression'
	trt = 'Treatment'
	duration = 'Duration of Radiation';
   DATALINES;
1	1	M	40	44	20	No	B
2	1	F	45	46	16	Yes	A
3	1	F	40	32	20	No	B
4	1	F	47	32	23	No	B
5	0	M	41	25	22	No	B
6	1	M	54	35	13	No	B
7	1	M	48	50	9	Yes	A
8	1	M	36	33	12	Yes	B
9	0	F	49	51	8	Yes	A
10	1	M	49	52	10	Yes	A
11	1	M	44	35	12	No	A
12	1	M	49	50	8	Yes	A
13	1	M	44	44	14	Yes	A
14	1	M	50	31	10	Yes	A
15	1	M	53	40	15	No	B
16	0	M	52	29	20	Yes	B
17	1	F	46	45	5	Yes	A
18	1	F	37	44	11	Yes	A
19	1	M	49	46	13	No	B
20	1	M	42	31	11	No	A
;

run;

proc template;
   delete Stat.Lifetest.Graphics.ProductLimitFailure2;
   source Stat.Lifetest.Graphics.ProductLimitFailure2 / file='tpl.tpl';
quit;

data _null_;                                         
   infile 'tpl.tpl' end=eof;                        
   input;                                            
   if _n_ eq 1 then call execute('proc template;');  
   _infile_ = tranwrd(_infile_, 'viewmax=1',        
                                'viewmax=100');      
_infile_ = tranwrd(_infile_, '1-', '100-100*');
_infile_ = tranwrd(_infile_, 'Failure Probability', 'Percentage, failing');
   call execute(_infile_);                          
   if eof then call execute('quit;');               
run;                                             
proc template;
   source Stat.Lifetest.Graphics.ProductLimitFailure2 /
     store=sasuser.templat file='tplmod.tpl';
quit;

proc lifetest data=have atrisk plots=survival(atrisk  (atrisktickonly outside  )  failure test ) ;
strata trt;
time os*os_censor(0);
run;


I am still having two problems that I would appreciate help with:

 

1. I am unable to edit the title of the figure (Product limit Failure Curves With Number of Subjects at Risk), but have not been able to change that title. 

2. The y axis, while now converted to percentages, the axis label itself is not correct.

 

I appreciate your help with this..

 

1 ACCEPTED SOLUTION

Accepted Solutions
WarrenKuhfeld
Ammonite | Level 13

Changing a dynamic variable METHOD to literal text:

 

_infile_ = tranwrd(_infile_, 'entrytitle METHOD', 'entrytitle "MY-TITLE"');

View solution in original post

8 REPLIES 8
ammarhm
Lapis Lazuli | Level 10

Solved the axis issue:

data _null_;                                       
   infile 'tpl.tpl' end=eof;                      
   input;                                           
   if _n_ eq 1 then call execute('proc template;'); 
   _infile_ = tranwrd(_infile_, 'viewmax=1',  'viewmax=100');     
_infile_ = tranwrd(_infile_, '1-', '100-100*');
_infile_ = tranwrd(_infile_, '(0 .2 .4 .6 .8 1.0)', '(0 20 40 60 80 100)');
_infile_ = tranwrd(_infile_, 'Failure Probability', 'Percentage, Failing');
   call execute(_infile_);                         
   if eof then call execute('quit;');           
run; 

But really not getting anywhere with the title issue

Hope someone could help

WarrenKuhfeld
Ammonite | Level 13

It looks like you were looking at something I wrote somewhere.  You are creating a file called tpl.tpl that contains the original SAS-provided templates. Look at that file with an ordinary text editor. Find the lines you want to change.  Then add the right translations to your DATA step to make the changes you want.

ammarhm
Lapis Lazuli | Level 10

Thanks @WarrenKuhfeld  you are absolutly correct.

i already tried to do that with a text editor but faced two problems:

1. The word 'product limit' does not appear in the template file at all!

2. Even when changing 'With Number of Subjects at Risk' using the same strategy in

 

_infile_ = tranwrd(_infile_, 'With Number of Subjects at Risk', 'Patients at risk');

 

SAS will still force 'With Number of Subjects at Risk' to appear.

i also tried 'ProvideSurvivalMacro' but no luck!

The failure curves are causing the code 'to fail' 🙂

 

WarrenKuhfeld
Ammonite | Level 13

I will try running it on Monday if you have not figured it out by then.

 

You should know that text in graphs come from two places:

  1. The graph template. This is the most obvious source.
  2. Message files. The term message file is not important. What is important is that sometimes the procedure decides at run time what text to display, because it cannot be known at procedure development time.  Then the text is sent to the template by using a dynamic variable.

If you see a variable-name-looking-thing on a statement or in an option in a template instead of a literal text string, and you also see that name in a dynamic statement, then that is a dynamic variable. For ad hoc changes, replace the dynamic variable with a literal text string.

 

 

WarrenKuhfeld
Ammonite | Level 13

Changing a dynamic variable METHOD to literal text:

 

_infile_ = tranwrd(_infile_, 'entrytitle METHOD', 'entrytitle "MY-TITLE"');

ammarhm
Lapis Lazuli | Level 10

Looks great @WarrenKuhfeld , this removed the 'product limit' part.

Could you please also help with the 'With number of subjects at risk' part? It is the title under the main title, obtained with asking for the numbers at risk (atrisk)

I have tired multiple combinations in vain:

 

_infile_ = tranwrd(_infile_, ' entrytitle "With Number of Subjects at Risk" ', 'entrytitle "testing" ');

_infile_ = tranwrd(_infile_, 'With Number of Subjects at Risk"', 'testing');

 

ammarhm
Lapis Lazuli | Level 10

Solved

	_infile_ = tranwrd(_infile_, 'entrytitle SECONDTITLE', 'entrytitle "MY SUBTITLE"');

Thanks @WarrenKuhfeld 

WarrenKuhfeld
Ammonite | Level 13

Everything you need is working now, right? 

 

There is nothing magical about any of this.  You simply look at the template and then edit it.  In the simplest case, you substitute one literal string for another. In your case, you substitute a literal string for a dynamic variable. Sometimes you add options or statements; sometimes you delete them. You can do all of this in an editor, but by using a DATA step, you have programmable/reproducible results.

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 16. Read more here about why you should contribute and what is in it for you!

Submit your idea!

What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 8 replies
  • 1062 views
  • 7 likes
  • 2 in conversation