BookmarkSubscribeRSS Feed
lorenzo_moraes
Calcite | Level 5

Hi, I want to plot a line in a specific value of x axis in a survivalplot, I tried to use an annotate data to do it. As you can see in my annotation data, that I call "anno", I using the 'LINE' function, but it is not working the way I want! I want to use my data values in the coordinates of the line, but when I put any drawspace with exception of the "GRAPHPERCENT", the function apparently does not work, any idea of what is wrong with my script?  Here is my sas code:

 

data sp;
	set sashelp.BMT;
run;


proc sgrender data=sp template=Stat.Lifetest.Graphics.ProductLimitSurvival; run;


ods document name=MyDoc(write); 
proc lifetest data=sashelp.BMT plots=survival(cb=hw test); 
	ods output survivalplot=sp; 
	ods select survivalplot; 
	time T * Status(0); 
	strata Group; 
run; 
ods document close;

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

proc document name=MyDoc; 
	ods output dynamics=outdynam; 
	obdynam \Lifetest#1\SurvivalPlot#1; 
quit;

data anno;
	 length label $100 function fillcolor linecolor $25;
	 retain drawspace 'datavalue' linethickness 3 display 'ALL'
	 widthunit 'data' heightunit 'data' anchor 'left';

	Function ='LINE'; x1 =	500;	y1 = 0.2;	x2 = 500;	y2 = 0.8; linecolor='black'; fillcolor='black';*drawspace='datavalue';
	output;
run;


proc print noobs; 
run;


%ProvideSurvivalMacros

%macro StmtsBeginGraph; annotate; %mend; 

%CompileSurvivalTemplates



proc template; 
	source Stat.Lifetest.Graphics.ProductLimitSurvival / file='temp.tmp'; 
quit;



data _null_; 
	infile 'temp.tmp'; 
	input; 
	if _n_ = 1 then call execute('proc template;'); 
	call execute(_infile_); 
	if _infile_ =: 'BeginGraph' then bg + 1; 
	if bg and index(_infile_,';') then do; 
		bg = 0; 
		call execute('annotate;'); 
	end; 
run;


data _null_; 
	set outdynam(where=(label1 ne '___NOBS___')) end=eof; 
	if nmiss(nvalue1) and cvalue1= '.' then cvalue1= ' '; 
	if _n_ = 1 then do; 
		call execute('proc sgrender data=sp sganno=anno'); 
		call execute('template=Stat.Lifetest.Graphics.ProductLimitSurvival;'); 
		call execute('dynamic'); 
	end; 
	if label1 = 'Transparency' then cvalue1 = '0.9'; 
	if cvalue1 ne ' ' then 
		call execute(catx(' ', label1, '=', 
					ifc(n(nvalue1), cvalue1, quote(trim(cvalue1))))); 
	if eof then call execute('; run;'); 
run;

proc sgrender data=sp sganno=anno 
			template=Stat.Lifetest.Graphics.ProductLimitSurvival; 
	dynamic NSTRATA = 3 PLOTATRISK = 0 PLOTHW = 1 PLOTEP = 0 PLOTCL=0 
		PLOTCENSORED = 1 Transparency = 0.9 PLOTTEST = 1 PVALUE = 0.0010059117 
		METHOD = "Product-Limit" XNAME = "T" LABELHW = "95% Hall-Wellner Band" 
		SECONDTITLE="With 95% Hall-Wellner Bands" GROUPNAME = "DiseaseGroup" 
		TESTNAME="Logrank"; 
run;

proc template; 
	delete Stat.Lifetest.Graphics.ProductLimitSurvival; 
quit;



Im following this PharmaSUG2016 documentation:

 

 

2 REPLIES 2
WarrenKuhfeld
Rhodochrosite | Level 12

I'll try to look over what you are doing tomorrow. In the mean time, you should know that this is the latest version of the KM plot modification examples.  https://support.sas.com/documentation/onlinedoc/stat/151/kaplan.pdf

WarrenKuhfeld
Rhodochrosite | Level 12

In the KM chapter I mentioned, find the section "Adding a Custom Header above the At-Risk Table". It provides a basic illustration of annotation. The text mentions annotation statements.  In SG plotting procedures (not relevant here but mentioned to provide context), you provide an annotation data set. In a graph template and SGRENDER, you provide annotation statements.

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 2 replies
  • 413 views
  • 0 likes
  • 2 in conversation