I created a macro variable: %let hi = ('g', 'c', 'v', 'd'); I want to put this list in code but need to add %% for each value, looks like this('%g%', '%c%', '%v%', '%d%'). is there a way i can get the result?
I want to have %% because I want to use LIKE in sql.
The most straight forward way would be loop over the items in the list and build a new list. Dealing with % and commas is a pain in macro code. So perhaps it would be a lot easier to just do it in a data step.
Example;
%let list=('a','b','c');
data _null_;
length old new word $1000 ;
old=symget('list');
do i=1 to countw(old,'( ,)','q');
word=quote(cats('%',dequote(scan(old,i,'( ,)','q')),'%'),"'");
new=catx(',',new,word);
end;
call symputx('newlist',cats('(',new,')'));
run;
%put &newlist;
Result
379 %put &newlist;
('%a%','%b%','%c%')
Note that a macro variable can be longer than a character variable in a data step. The maximum length in a variable is 32K (32,767) versus 64K for a macro variable.