DATA Step, Macro, Functions and more

Difference between %scan and %qscan

Reply
Super Contributor
Posts: 436

Difference between %scan and %qscan

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

Super User
Posts: 7,866

Re: Difference between %scan and %qscan

[ Edited ]

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.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Super Contributor
Posts: 271

Re: Difference between %scan and %qscan

%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
Ask a Question
Discussion stats
  • 2 replies
  • 918 views
  • 0 likes
  • 3 in conversation