Я только что обнаружил, что ods graphics/reset;
сломал мой цикл. Мне все еще интересно, почему это произошло, и если есть другие потенциальные подобные подводные камни.Макросъемка по столбцам в SAS, разбитая ods
Цель: Я хочу перебрать столбцы в SAS и предоставить график, в котором переменная x остается постоянной, но размерность y варьируется. Я мог бы транспонировать и использовать оператор by by. Я не хочу этого делать.
Проблема: Несмотря на журнал с options mprint ;
, показывающий, что замена текста работает правильно, выведенные графики отображают только окончательный график, а не каждый отдельный график. Повторить - в журнале все правильно увеличивается/на выходе в сюжете и заголовке отображается только последнее значение цикла.
Решения: Удалить ods graphics/reset;
Вот пример игрушки:
proc sgplot data=sashelp.cars;
series x=EngineSize y=Cylinders;
scatter x=EngineSize y=Cylinders;
run;
proc sql ; select distinct NAME
into :varlist separated by ' '
from dictionary.columns
where libname='SASHELP' and memname = 'CARS' AND TYPE='num';
quit;
%let n=&sqlobs;
%MACRO PLOTYA;
%do i= 1 %to &n ;
%let currentvalue = %scan(&varlist, &i);
%put ¤tvalue;
%put &i ;
ods graphics on/width=12.5 in height=12.5in imagemap ;
title "¤tvalue &i ";
proc sgplot data=sashelp.cars;
series x=EngineSize y=¤tvalue ;
scatter x=EngineSize y=¤tvalue
;run;
ods graphics/reset;
%end;
%MEND PLOTYA;
options mprint;
%plotya ;
Спасибо за ваше время.
Ну, возможно, я должен был сказать "сломал программу. По-прежнему кажется странным, что отображаемый результат был только последним результатом. Сброс произошел после sgplot. Я полагаю, что только вывод в средство просмотра результатов происходит после обработки цикла do. –
Верно: просмотр результатов обновляется только в конце обработки одной партии кода. – Joe