У меня есть программа SAS, которая динамически строит таблицу с помощью макроса, как так:Оптимизировать строит таблицу SAS с макросами
%macro Projection;
%do i=1 %to &number_of_Years;
%Advance_Years;
proc sql;
create table Projection as
select *, Year_&previous_year.*(1+return) as Year_¤t_year.
from Projection;
quit;
%end;
%Mend Projection;
%Projection;
Это упрощенная версия моего кода. Макрос %Advance_Years
в основном продвигает ¤t_year
и &previous_year
макрос 1 года. Как вы можете видеть, эта таблица получает 1 переменную в год. Проблема в том, что количество строк для этой таблицы может достигать сотен тысяч, и я видел, как время выполнения увеличилось, достигнув нескольких часов.
Я пробовал option compress=yes
, и это помогло сократить время выполнения, но не много. Я пробовал большинство советов и советов SAS для ускорения выполнения, но опять же, не так уж и много. Я запускаю Base SAS 9.2 на 32b.
Я думаю, что я ошибаюсь в технике добавления переменных. Является ли тот факт, что я перезаписываю таблицу в каждом цикле, влияет на эффективность выполнения? Если да, то как я могу переписать это как эффективный код MOST? Пожалуйста, имейте в виду, что я не могу «переставить» таблицу и просто добавить несколько строк. Заранее спасибо!
Почему вы не можете добавить строки в существующую таблицу? –
Это произвольное ограничение. Оригинальная программа построена вокруг концепции, что столбцы представляют собой временную прогрессию. Транспонирование таблицы в основном означало бы, что я должен переписать всю программу. – Pane
Я не совсем понимаю, что вы подразумеваете, переставляя стол, но ваш подход, похоже, является попыткой продлить вашу агонию. Возможно, неплохо было бы укусить пулю, нормализовать вашу базу данных и устранить эту годовую задачу. –