Макропроцессор работает до того, как сгенерированный код передается в SAS для интерпретации. Таким образом, ваш код оценивается в следующем порядке:
%let prod=WC;
%let list = (60 , 63 );
%let list2= ("6A","6B","6C") ;
%let list = (33 , 34);
%let list2= ("3A","3B");
data ...
SELECT ;
WHEN (WC = &prod) DO;
END;
WHEN (MT = &prod) DO;
END;
OTHERWISE;
END;
...
RUN;
Чтобы установить макропеременные из шага текущих данных, используйте функцию CALL SYMPUTX (). Также вы действительно пытаетесь сравнить переменную W C с переменной MT? Есть ли в данных на вашем шаге данных эти переменные? Или вы хотели сравнить текст W C с текстом MT?
when ("WC" = "&prod") do;
call symputx('list','(60,63)');
call symputx('list2','("6A","6B","6C")') ;
end;