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
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.
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.
thank you. Yes, it is just a simplified piece.
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.