It is well documented that the macro quoting may confuse the tokenizer. Read the last paragraph about this happening with a %bquote()'ed quotation mark here. Time to time, we may have to explicitly %unquote().
Maybe this is one of the reasons why we have this convention of naming a macro with a "q" prefix when it returns a macro quoted string. (For instance, %qTrim(), %qSubstr(), ...)
Another way to prevent this problem is just to return an unquoted string instead. For your problem, I would rather write two simple macros with more explicit names like below. HTH.
%*-- single quote --*;
%macro squote(str);
%if %superq(str)= %then %return;
%local s;
%let s = %str(%');
%unquote(&s%sysfunc(tranwrd(&str,&s,&s&s))&s)
%mend squote;
%*-- comma separated quoted values --*;
%macro csqv(list, dlm=*);
%if %superq(list)= %then %return;
%local i item;
%let i = 1;
%let item = %qscan(&list, &i);
%do %while (&item ^=);
%if &i > 1 %then %*;,;
%*;%squote(&item)
%let i = %eval(&i + 1);
%let item = %qscan(&list, &i);
%end;
%mend csqv;
%*-- check --*;
proc print data=sashelp.class;
where name in (%csqv(Alfred*Alice*Barbara));
run;
/* on lst
Obs Name Sex Age Height Weight
1 Alfred M 14 69.0 112.5
2 Alice F 13 56.5 84.0
3 Barbara F 13 65.3 98.0
*/
... View more