Возможно, отдельная операция не происходит, пока все строки не будут обработаны с помощью cat. Это будет означать, что у вас есть внутренний временный ресурс с большим количеством строк (для таблицы 15G) с широким результатом cat (с длиной по умолчанию 200 символов) до удаления дубликатов для отдельной операции.
Попробуйте переместить отдельный выбор в
%let column = years;
proc sql noprint;
select
cat ("data B", &column., "xxx;"
, "set A_20112012_xxx;"
, "where &column=", &column., ";"
, "run;"
)
into :SplitSteps separated by ";"
from (select distinct &column from A_20112012_xxx)
;
quit;
&SplitSteps;
Иногда для ясности лучше использовать модульность
%macro data_fracker (data=, column=);
%macro split_for (value);
data B_&value._xxx;
set &data;
where &column = &value;
run;
%mend;
%local dispatch;
proc sql noprint;
select cats('%split_for(', &column, ')')
into :dispatch separated by ' '
from (select distinct &column from &data)
;
quit;
&dispatch
%mend;
%data_fracker (data=sashelp.class, column=age)
Также
- Что такое операционная система и оборудование?
- Если Windows, какое место на диске?
- Что сообщает
wmic logicaldisk list brief
? 1017 *
- Что такое папка WORK libref?
- Что такое реальный журнал?
- Запускается ли какой-либо из разделенных шагов?