BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
POOJA_J
Obsidian | Level 7

POOJA_J_0-1697546347258.png

 

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.

1 ACCEPTED SOLUTION

Accepted Solutions
Rick_SAS
SAS Super FREQ

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.

View solution in original post

4 REPLIES 4
Rick_SAS
SAS Super FREQ

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.

Quentin
Super User

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).

POOJA_J
Obsidian | Level 7
I searched in google - MCQ questions for Advanced SAS certification.