Попытка поставить запятые в значении макропеременной является проблемой, поскольку запятая используется для обозначения перехода между значениями параметров в вызове макроса.
То, что вы опубликовали, на самом деле является одним из способов, позволяющих включать запятые в значение параметра макроса. Вложив значение внутрь или ()
, SAS-компилятор узнает, что запятые не обозначают начало новых значений параметров. Если вы исправите свой макрос так, чтобы он генерировал допустимый оператор SELECT, тогда он работает.
%macro data_pull (name=);
proc sql;
select * from sashelp.class where name in &name;
quit;
%mend data_pull;
%data_pull(name=('Alfred','Alice','ben','adam'))
Но настоящее решение еще проще. Только не включайте запятые в значение для начала. Оператору IN
они не нужны. Затем вы можете добавить ()
в коде макроса.
%macro data_pull (name=);
proc sql;
select * from sashelp.class where name in (&name);
quit;
%mend data_pull;
%data_pull(name='Alfred' 'Alice' 'ben' 'adam')
Или вы можете сделать свой макрос немного умнее, и тогда пользователь может включить ()
или нет при вызове макроса.
%macro data_pull (name=);
proc sql;
select * from sashelp.class
where name in (%scan(&name,1,(),q));
quit;
%mend data_pull;