This should be posted in the forum "SAS Macro Facility, Data Step and SAS Language Elements". It has nothing to do with SAS Statistical Procedures.
That said, you should be able to pass the string for cat1 by using the %str() macro quoting function.
%cat(cat1=%str('Apparel, Accessories & Footwear','Other','Toys'), cat=allvert);
I would note that your %macro statement names cat1 as a positional parameter and cat as a keyword parameter. However, your invocation shows that you intend to use cat1 as a keyword parameter. Code which is consistent for both macro definition and invocation would be:
%macro cat(cat1=, cat=);
data &cat;
set lastqcomp;
where vertical in (&cat1);
run;
%mend cat;
%cat(cat1=%str('Apparel, Accessories & Footwear','Other','Toys'), cat=allvert);