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;
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.