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

Using SAS 9.4 I am running the following code to format a KM curve:

 

data _null_;
%let url = //support.sas.com/documentation/onlinedoc/stat/ex_code/151;
infile "http:&url/templft.html" device=url;

file 'macros.tmp';
retain pre 0;
input;
_infile_ = tranwrd(_infile_, '&', '&');
_infile_ = tranwrd(_infile_, '&lt;' , '<');
if index(_infile_, '</pre>') then pre = 0;
if pre then put _infile_;
if index(_infile_, '<pre>') then pre = 1;
run;


%ProvideSurvivalMacros /* variables available. */

%let TitleText0 = "Figure 2: Implant Survival Free of Reoperation for Infection"; /* Change the title. */
%let TitleText1 = &titletext0 " for " STRATUMID;
%let TitleText2 = &titletext0;
%let xOptions = label="Time to Implant Failure (in Months)"
linearopts=(viewmin=0 viewmax=132
tickvaluelist=(0 12 24 36 48 60 72 84 96 108 120 132));
%let GraphOpts = attrpriority=none
DataLinePatterns=(Solid ShortDash);
%CompileSurvivalTemplates /* Compile the templates with */
/* the new title. */

proc lifetest data = have plots=survival(test ATRISK(maxlen=50));
time TT_fail_months *failure2(0) ;
strata INDEX_TYPE_REV ;
label INDEX_TYPE_REV = 'Index Revision Type'
TT_fail_months = 'Time to Implant Failure (in Months)' ;
run;

%ProvideSurvivalMacros /* Optionally restore the default */
/* macros and macro variables. */

proc template; /* Delete the modified templates. */
delete Stat.Lifetest.Graphics.ProductLimitSurvival / store=sasuser.templat;
delete Stat.Lifetest.Graphics.ProductLimitSurvival2 / store=sasuser.templat;
run;

 

It has previously run and produced the KM curve as specified. I am returning to it a few months later and now it will not run. Any help would be welcomed. Thank you

 

Below is my log:

204 data _null_;
205 %let url = //support.sas.com/documentation/onlinedoc/stat/ex_code/151;
206 infile "http:&url/templft.html" device=url;
207
208 file 'macros.tmp';
209 retain pre 0;
210 input;
211 _infile_ = tranwrd(_infile_, '&amp;', '&');
212 _infile_ = tranwrd(_infile_, '&lt;' , '<');
213 if index(_infile_, '</pre>') then pre = 0;
214 if pre then put _infile_;
215 if index(_infile_, '<pre>') then pre = 1;
216 run;

NOTE: The infile "http://support.sas.com/documentation/onlinedoc/stat/ex_code/151/templft.html"
is:
Filename=http://support.sas.com/documentation/onlinedoc/stat/ex_code/151/templft.html,
Local Host Name=OCMRCRSLT014,
Local Host IP addr=fe80::f555:3075:e4:7d2c%24,
Service Hostname Name=support.sas.com,
Service IP addr=149.173.160.38,
Service Name=httpd,Service Portno=80,
Lrecl=32767,Recfm=Variable

NOTE: The file 'macros.tmp' is:
Filename=C:\Users\gscar\Desktop\HK073 Unresectable\macros.tmp,
RECFM=V,LRECL=32767,File Size (bytes)=0,
Last Modified=26May2020:13:30:31,
Create Time=21Feb2020:10:30:04

NOTE: 578 records were read from the infile
"http://support.sas.com/documentation/onlinedoc/stat/ex_code/151/templft.html".
The minimum record length was 0.
The maximum record length was 1076.
NOTE: 361 records were written to the file 'macros.tmp'.
The minimum record length was 0.
The maximum record length was 80.
NOTE: DATA statement used (Total process time):
real time 4.74 seconds
cpu time 0.04 seconds


WARNING: Apparent invocation of macro PROVIDESURVIVALMACROS not resolved.
217
218
219 %ProvideSurvivalMacros /* variables available. */
-
180
ERROR 180-322: Statement is not valid or it is used out of proper order.

220
221 %let TitleText0 = "Figure 2: Implant Survival Free of Reoperation for Infection"; /*
221! Change the title. */
222 %let TitleText1 = &titletext0 " for " STRATUMID;
223 %let TitleText2 = &titletext0;
224 %let xOptions = label="Time to Implant Failure (in Months)"
225 linearopts=(viewmin=0 viewmax=132
226 tickvaluelist=(0 12 24 36 48 60 72 84 96 108 120 132));
227 %let GraphOpts = attrpriority=none
228 DataLinePatterns=(Solid ShortDash);
229 %CompileSurvivalTemplates /* Compile the templates with */
WARNING: Apparent invocation of macro COMPILESURVIVALTEMPLATES not resolved.
230 /* the new title. */
231
232 proc lifetest data = have plots=survival(test ATRISK(maxlen=50))
232! ;

233 time TT_fail_months *failure2(0) ;
----
180

ERROR 180-322: Statement is not valid or it is used out of proper order.

234 strata INDEX_TYPE_REV ;
------
180

ERROR 180-322: Statement is not valid or it is used out of proper order.

235 label INDEX_TYPE_REV = 'Index Revision Type'
-----
180
ERROR 180-322: Statement is not valid or it is used out of proper order.

236 TT_fail_months = 'Time to Implant Failure (in Months)' ;

WARNING: Apparent invocation of macro PROVIDESURVIVALMACROS not resolved.
237 run;
238
239 %ProvideSurvivalMacros /* Optionally restore the default */
-
180
ERROR 180-322: Statement is not valid or it is used out of proper order.

240 /* macros and macro variables. */
241
242 proc template;

242! /* Delete the modified templates. */
243 delete Stat.Lifetest.Graphics.ProductLimitSurvival / store=sasuser.templat;
------
180

ERROR 180-322: Statement is not valid or it is used out of proper order.

244 delete Stat.Lifetest.Graphics.ProductLimitSurvival2 / store=sasuser.templat;
------
180

ERROR 180-322: Statement is not valid or it is used out of proper order.

245 run;

 

 

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
WarrenKuhfeld
Ammonite | Level 13

Your data step wrote the macros to a local file. Then you skipped including them.  Look at the documentation.

 

%inc 'macros.tmp' / nosource;

https://support.sas.com/documentation/onlinedoc/stat/151/kaplan.pdf 

View solution in original post

2 REPLIES 2
arthurcavila
Obsidian | Level 7
From the log: WARNING: Apparent invocation of macro PROVIDESURVIVALMACROS not resolved.

Did you run the code that creates the macro in your current SAS session before calling the macro?
WarrenKuhfeld
Ammonite | Level 13

Your data step wrote the macros to a local file. Then you skipped including them.  Look at the documentation.

 

%inc 'macros.tmp' / nosource;

https://support.sas.com/documentation/onlinedoc/stat/151/kaplan.pdf 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

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.

SAS Training: Just a Click Away

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

Browse our catalog!

Discussion stats
  • 2 replies
  • 1713 views
  • 0 likes
  • 3 in conversation