Solved
New Contributor
Posts: 2

# Variables in macro

I am trying to write my first macro and I am having problems manipulating the parameters inside macro. This is the code:

%macro SecondDerivative_New (parlambda, parepsilon);

m=%sysevalf(&parlambda+&parepsilon); /* this gives an error ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The                                                                  condition was:    lambda+epsilon  */

result1=%FirstDerivative(parlambda=m);

%mend;

%macro FirstDerivative (parlambda=);

10/&parlambda+24*(exp(-1*&parlambda))/(1-exp(-1*&parlambda))-28.52;

%mend;

/* call macro */

data;

lambda=0.799;

epsilon=0.001;

%SecondDerivative_New(lambda,epsilon);

Thank you

Accepted Solutions
Solution
‎11-15-2012 09:29 AM
Posts: 1,612

## Re: Variables in macro

I assume that you have greatly simplified things from a much more complex situation.

Based on what you have shown, macros are completely unnecessary here, but maybe they are needed in a more complex situation...

You cannot add data set variables using %SYSEVALF. You can only add macro variables using %SYSEVALF.

So, &parlambda resolves to lambda (which is not a macro variable, it is a datastep variable). &parepsilon resolves to epsilon (which is not a macro variable, it is a datastep variable).

If your macro is always going to have arguments that resolve to datastep variables, then you simply say

m=&parlambda + &parepsilon;

But as I said, using macros and macro variables in this simple situation is completely unnecessary.

All Replies
Solution
‎11-15-2012 09:29 AM
Posts: 1,612

## Re: Variables in macro

I assume that you have greatly simplified things from a much more complex situation.

Based on what you have shown, macros are completely unnecessary here, but maybe they are needed in a more complex situation...

You cannot add data set variables using %SYSEVALF. You can only add macro variables using %SYSEVALF.

So, &parlambda resolves to lambda (which is not a macro variable, it is a datastep variable). &parepsilon resolves to epsilon (which is not a macro variable, it is a datastep variable).

If your macro is always going to have arguments that resolve to datastep variables, then you simply say

m=&parlambda + &parepsilon;

But as I said, using macros and macro variables in this simple situation is completely unnecessary.

New Contributor
Posts: 2

## Re: Variables in macro

thank you. Yes, it is just a simplified piece.

☑ This topic is SOLVED.

Discussion stats
• 2 replies
• 228 views
• 0 likes
• 2 in conversation