I am trying to write a macro that puts a prefix inside all quoted strings in a list. It does work, but throws Note 49-169 for all prefix that seem not to make sense to SAS.
%macro prefixstrings(stringlist, prefix);
%sysfunc(prxchange(s/\'(\w+)/'&prefix$1/,-1,&stringlist))
%mend;
%put %prefixstrings(unquoted test 'quoted test', x);
/* no complaints because apparently '...'x is detected as having a meaning */
%put %prefixstrings(unquoted test 'quoted test', A);
/* NOTE 49-169 ... :-( */Is there an easy workaround to avoid this? Putting a blank before &prefix is no option since the result is undesired.
Put the initial quote into a look-behind assertion, like this:
%macro prefixstrings(stringlist, prefix);
%sysfunc(prxchange(s/(?<=%str(%'))(\w+)/&prefix$1/,-1,&stringlist))
%mend;
Nearly 200 sessions are now available on demand with the SAS Innovate Digital Pass.
Explore Now →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.
Ready to level-up your skills? Choose your own adventure.