Я пытаюсь создать один набор данных с помощью итераций макро цикла. Я обнаружил, что для добавления в proc не требуется определенной BASE, поэтому подход должен быть жизнеспособным. Однако я столкнулся с проблемой с длинами имен переменных.
Я создал простой, воспроизводимый пример, который демонстрирует мою проблему. Конечно, это не самый эффективный способ создания моего окончательного набора данных want
, но этот процесс имитирует рабочий процесс в моем коде.
proc sql;
select name from sashelp.class;
select name
into :name_1 - :name_&sqlobs
from sashelp.class;
quit;
%macro forward_loop;
%do i = 1 %to 10;
proc sql;
create table temp as
select
"&&name_&i" as name,
age
from sashelp.class
quit;
proc append base=want data=temp;
run;
%end;
%mend;
%forward_loop;
ПРИМЕЧАНИЕ: добавление WORK.TEMP к WORK.WANT.
ВНИМАНИЕ: Имя переменной имеет разную длину в файлах BASE и DATA (BASE 6 DATA 7).
ОШИБКА: добавление не выполнено из-за перечисленных выше аномалий. Используйте опцию FORCE для добавления этих файлов.
ПРИМЕЧАНИЕ: добавлено 0 наблюдений.
Я полагаю, что могу решить эту проблему на этапе proc sql, просто указав, что name
дополняется до определенной стандартной длины. Однако я не смог понять, как это сделать.
Это правильный подход? Или есть способ создать структуру BASE без каких-либо строк данных в BASE?