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

Hi,

 

I was trying to conduct Cox proportional hazard model using below macro. However, it stopped and gave me error messages " ERROR: More positional parameters found than defined." for the last 6 variables.

%HR(ace_arb);
%HR(ccb);
%HR(asa);
%HR(statin);
%HR(bb);
%HR(Stage);

 

Below is my SAS macro code:


libname out xlsx "H:\Data\HR_Categorical_RS.xlsx";
%macro HR(x=);
%let outputName=_PE%substr(%cmpres(&x.),1,%sysfunc(min(%length(&x.),29)));
ods graphics off;
ods output ParameterEstimates=&outputName.;

proc phreg data = RS1;
class &x;
model CTOX53cox_interval_1_6_21*CTOX53__within_1_year_of_trastuz(0) = &x /rl;
run;

ods output close;
ods graphics on;

%mend HR;

%HR(x=Age_C);
%HR(x=BMI_C );
%HR(x=Anthracycline__current_or_prior_);
%HR(x=XRT);
%HR(x=ER_cat);
%HR(x=htn);
%HR(x=dm);
%HR(x=hl);
%HR(x=cad);
%HR(x=arrhythmia__AY_adjudicated_1_202);
%HR(x=Smoking);
%HR(x=LVEF_C);
%HR(x=Race);
%HR(x=PR);
%HR(x=Treatment_Year);
%HR(ace_arb);
%HR(ccb);
%HR(asa);
%HR(statin);
%HR(bb);
%HR(Stage);

 

Below is the log:

 

2705 %HR(x=Race);

NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PERACE has 2 observations and 11 variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.03 seconds
cpu time 0.04 seconds


2706 %HR(x=PR);

NOTE: 1 observations were deleted due either to missing or invalid values
for the time, censoring, frequency or explanatory variables or to
invalid operations in generating the values for some of the
explanatory variables.
NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PEPR has 1 observations and 11 variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds


2707 %HR(x=Treatment_Year);

NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PETREATMENT_YEAR has 4 observations and 11
variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds

 

ERROR: More positional parameters found than defined.
ERROR: More positional parameters found than defined.
2708 %HR(ace_arb);
ERROR: More positional parameters found than defined.
2709 %HR(ccb);
ERROR: More positional parameters found than defined.
2710 %HR(asa);
ERROR: More positional parameters found than defined.
2711 %HR(statin);
ERROR: More positional parameters found than defined.
2712 %HR(bb);
ERROR: More positional parameters found than defined.
2713 %HR(Stage);

 

Could you please help me with trouble shooting my code? Thank you!

 

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26
2708 %HR(ace_arb);
ERROR: More positional parameters found than defined.

You did not define a positional parameter for macro %HR. And when you call the macro this way, you have a positional paramter ace_arb. The macro %HR as defined only accepts a keyword parameter.

 

However, this would work

 

%hr(x=ace_arb)

 

 

--
Paige Miller

View solution in original post

3 REPLIES 3
PaigeMiller
Diamond | Level 26
2708 %HR(ace_arb);
ERROR: More positional parameters found than defined.

You did not define a positional parameter for macro %HR. And when you call the macro this way, you have a positional paramter ace_arb. The macro %HR as defined only accepts a keyword parameter.

 

However, this would work

 

%hr(x=ace_arb)

 

 

--
Paige Miller
ballardw
Super User

When you define a macro with parameters like x= that is a Keyword parameter.

If you do not reference the parameter with the x= in the macro call then SAS treats that as a Positional Parameter(order of appearance assigns value to parameter. All positional parameters must be defined before keyword, if you mix them, so that SAS can tell which goes where. When you define the parameter as a Keyword parameter it is NOT a positional parameter and must be used.

Simple fix: use the X= in the macro calls.

Or if you only have one parameter don't use the keyword definition. Note that for positional parameters x= is still acceptable though arguments may exist about whether it is good style.

 

One of the reasons for this position first is that keyword parameters may be assigned a default value in the definition. A 'positional' parameter that is attempting to override the defined default doesn't have enough information as to which keyword it might be replacing (remember that some macros can have a LOT of parameters) and the code for the macro processor to "guess" as to the correct usage would be akin to mind reading.

Reeza
Super User
%HR(x=Treatment_Year);
%HR(ace_arb);

Looking at your code closely, you can see the macro calls that work are formatted differently from the macro calls that do not, specifically you're missing the X= portion.

 

Spoiler

@Denali wrote:

Hi,

 

I was trying to conduct Cox proportional hazard model using below macro. However, it stopped and gave me error messages " ERROR: More positional parameters found than defined." for the last 6 variables.

%HR(ace_arb);
%HR(ccb);
%HR(asa);
%HR(statin);
%HR(bb);
%HR(Stage);

 

Below is my SAS macro code:


libname out xlsx "H:\Data\HR_Categorical_RS.xlsx";
%macro HR(x=);
%let outputName=_PE%substr(%cmpres(&x.),1,%sysfunc(min(%length(&x.),29)));
ods graphics off;
ods output ParameterEstimates=&outputName.;

proc phreg data = RS1;
class &x;
model CTOX53cox_interval_1_6_21*CTOX53__within_1_year_of_trastuz(0) = &x /rl;
run;

ods output close;
ods graphics on;

%mend HR;

%HR(x=Age_C);
%HR(x=BMI_C );
%HR(x=Anthracycline__current_or_prior_);
%HR(x=XRT);
%HR(x=ER_cat);
%HR(x=htn);
%HR(x=dm);
%HR(x=hl);
%HR(x=cad);
%HR(x=arrhythmia__AY_adjudicated_1_202);
%HR(x=Smoking);
%HR(x=LVEF_C);
%HR(x=Race);
%HR(x=PR);
%HR(x=Treatment_Year);
%HR(ace_arb);
%HR(ccb);
%HR(asa);
%HR(statin);
%HR(bb);
%HR(Stage);

 

Below is the log:

 

2705 %HR(x=Race);

NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PERACE has 2 observations and 11 variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.03 seconds
cpu time 0.04 seconds


2706 %HR(x=PR);

NOTE: 1 observations were deleted due either to missing or invalid values
for the time, censoring, frequency or explanatory variables or to
invalid operations in generating the values for some of the
explanatory variables.
NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PEPR has 1 observations and 11 variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.03 seconds
cpu time 0.03 seconds


2707 %HR(x=Treatment_Year);

NOTE: Convergence criterion (GCONV=1E-8) satisfied.
NOTE: The data set WORK._PETREATMENT_YEAR has 4 observations and 11
variables.
NOTE: PROCEDURE PHREG used (Total process time):
real time 0.04 seconds
cpu time 0.03 seconds

 

ERROR: More positional parameters found than defined.
ERROR: More positional parameters found than defined.
2708 %HR(ace_arb);
ERROR: More positional parameters found than defined.
2709 %HR(ccb);
ERROR: More positional parameters found than defined.
2710 %HR(asa);
ERROR: More positional parameters found than defined.
2711 %HR(statin);
ERROR: More positional parameters found than defined.
2712 %HR(bb);
ERROR: More positional parameters found than defined.
2713 %HR(Stage);

 

Could you please help me with trouble shooting my code? Thank you!

 


 

 

 

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
  • 3 replies
  • 5291 views
  • 3 likes
  • 4 in conversation