%DO is not as flexible as DO.
Make a list and loop over an index into the list.
Note: the %UNQUOTE() is because sometimes the parser can get confused by this type of syntax and treat the XYZ and %SCAN() as separate tokens.
%let suffix=1 2 3 8 10;
data x ;
set
%do i=1 %to %sysfunc(countw(&suffix,%str( )));
%unquote(xyz%scan(&suffix,&i,%str( )))
%end;
;
run;