I cam across one of this MCQ's.
The macro doesn't have a DO loop so how does it create values of 3,2,1?
Plz explain the logic working behind this.
The "magic" is in the first line. The %EVAL macro will evaluate it's argument when the code is run.
So when n=4, the first line evaluates to
%EVAL( 4 + %mysum(3) ).
This causes the %MYSUM macro to be run with a new argument. This time the first line evaluates to (dropping the %EVAL call, for convenience)
3 + %mysum(2).
This continues recursively until the argument n=1, in which case the macro generates
1
Cumulatively, the macro generates an expression that is equivalent to
%EVAL(4 + %EVAL(3 + %EVAL(2 + 1)))
which is displayed in the log by using the %PUT call.
The "magic" is in the first line. The %EVAL macro will evaluate it's argument when the code is run.
So when n=4, the first line evaluates to
%EVAL( 4 + %mysum(3) ).
This causes the %MYSUM macro to be run with a new argument. This time the first line evaluates to (dropping the %EVAL call, for convenience)
3 + %mysum(2).
This continues recursively until the argument n=1, in which case the macro generates
1
Cumulatively, the macro generates an expression that is equivalent to
%EVAL(4 + %EVAL(3 + %EVAL(2 + 1)))
which is displayed in the log by using the %PUT call.
Curious which class this is from, can you share? I don't see a lot of recursive macros. I would consider it an advanced topic for the macro language (but I guess would be included in an introductory class for many languages).
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.
Find more tutorials on the SAS Users YouTube channel.