BookmarkSubscribeRSS Feed
dashsas
Calcite | Level 5

I am using SAS 9.4. I have the following code:

48221  %let userAsof='28FEB2018'd;
48222
48223  /*2.a)*/ %let lAsOf = intnx(month,&userAsOf.,0,e);
48224  %put lAsOf = &lAsof;
lAsOf = intnx(month,'28FEB2018'd,0,e)
48225
48226  /*2.b)*/ %let lAsOf = %sysfunc(intnx(month,&userAsOf.,0,e));
48227  %put lAsOf = &lAsof;
lAsOf = 21243

 

I am trying to reason as to why the two outputs are different by thinking about the steps that are taken chronologically behind the scenes. Please tell me if I am wrong or there is anything to be added on. Differences in the steps are highlighted in bold.

 

1. SAS recognizes the % sign to prompt the macro processor. userAsof is stored in Global Symbol table as text '28FEB2018'd.

 

2.A)

  • SAS recognizes the % sign to prompt the macro processor. lAsOf is stored in the Global Symbol table.
  • However, while evaluating the RHS expression, SAS recognizes the & sign to prompt the macro processor again. It finds the userAsof variable in the global symbol table and replaces the expression.
  • The rest of the RHS is not evaluated and remains as text because intnx is a datastep function and when setting a macro variable we're concerned with the macro processor and not the data step compiler.

 

2.B)

  • SAS recognizes the % sign to prompt the macro processor. lAsOf is stored in the Global Symbol table.
  • on the RHS, SAS recognizes the % sign to prompt the macro processor. sysfunc tells SAS to evaluate the intnx datastep function. So we go to the data step compiler to compile and execute the intnx datastep function.
    • while evaluating this expression, SAS recognizes the & sign to prompt the macro processor again. It finds the userAsof variable in the global symbol table and replaces the expression. Then SAS finishes compiling and executing the RHS expression.

Any help is appreciated. Thanks.

 

 

2 REPLIES 2
dashsas
Calcite | Level 5
😞
Tom
Super User Tom
Super User

Doesn't sound like you need any help.

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to Concatenate Values

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 2 replies
  • 526 views
  • 1 like
  • 2 in conversation