Я бы не стал переносить данные из наборов данных в макропеременные.
Первое, что нужно попробовать, это вообще не использовать макрокодирование.Попробуйте просто использовать списки наборов данных.Если вы можете найти один или несколько общих префиксов для нужных наборов данных.
data project.TABLE_FINALE;
set project.TABLE_20: ;
run;
Если вы действительно хотите поместить список в макропеременные, то это концептуально более понятно, и кодирование будет проще, если вы просто поместитесписок в одну макропеременную.
proc sql noprint;
select dsname into :dslist separated by ' '
from mylist;
quit;
data project.TABLE_FINALE;
set &dslist;
run;
Но если у вас действительно есть 1000 наборов данных, это может быть слишком много для помещения в одну макропеременную (ограничение 65 КБ символов).
Вы также можете просто сгенерировать код изданные вместо использования макроса для генерации кода.Тогда нет необходимости перемещать какие-либо данные в макропеременные.Например, вы можете использовать CALL EXECUTE()
.
data _null_;
set mylist end=eof;
if _n_=1 then call execute('data project.TABLE_FINALE; set');
call execute(' '||trim(dsname));
if eof then call execute(';run;');
run;