BookmarkSubscribeRSS Feed
Babloo
Rhodochrosite | Level 12

May I request someone to illutsrate me the following example to understand the difference between %scan and %qscan?

 

%macro a;
   aaaaaa
%mend a;
%macro b;
   bbbbbb
%mend b;
%macro c;
   cccccc
%mend c;

%let x=%nrstr(%a*%b*%c);
%put X: &x;
%put The third word in X, with SCAN: %scan(&x,3,*);
%put The third word in X, with QSCAN: %qscan(&x,3,*);


The %PUT statement writes these lines to the log: 
X: %a*%b*%c
The third word in X, with SCAN: cccccc
The third word in X, with QSCAN: %c

I took this example from http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#z3514scan.htm

 

 

In the example citied above, I would like to understand how does %scan and %qscan function got resolved?

 

If X resolves to %a*%b*%c then scan function should return %c whereas it returns cccccc. Why so? Whether my underst

2 REPLIES 2
Kurt_Bremser
Super User

The %scan() function does not prevent the evaluation of the characters & and %. Therefore macro calls and variables are resolved before the scan for words is done.

%qscan prevents macro evaluation, as it treats & and % as "normal" characters.

Therefore you get what the macros resolve to with %scan, and the unresolved macro names with %qscan.

SAS_inquisitive
Lapis Lazuli | Level 10
%qscan is macro quoting function. 'q' is mnemonic for quoting. It treats macro triggers (&, %) as text. http://www2.sas.com/proceedings/sugi25/25/aa/25p004.pdf
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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 4790 views
  • 0 likes
  • 3 in conversation