【发布时间】:2015-02-19 02:00:29
【问题描述】:
我刚刚发现ods graphics / reset; 打破了我的循环。我仍然很好奇为什么会发生这种情况,以及是否还有其他潜在的类似陷阱。
目标: 我想遍历 SAS 中的列并提供一个 x 变量保持不变但 y 维度变化的图。我可以转置并使用 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 ;
感谢您的宝贵时间。
【问题讨论】: