DATA Step, Macro, Functions and more

Variables in macro

Accepted Solution Solved
Reply
New Contributor
Posts: 2
Accepted Solution

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
Trusted Advisor
Posts: 1,934

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.

View solution in original post


All Replies
Solution
‎11-15-2012 09:29 AM
Trusted Advisor
Posts: 1,934

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 and locked.

Need further help from the community? Please ask a new question.

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