2

一般来说,我对编码和 SAS 还是很陌生。我尝试创建一堆与行数相对应的 KPI 图表,但下面的循环代码不断为最后一行创建两个相同的 GPKI 图表。为什么会这样?任何帮助将不胜感激。

谢谢

%Macro scanloop (scanfile,field1,field2,field3);
data _null_;
if 0 then set &scanfile nobs=X;
call symput ('Count',X);
stop;
run;

%DO I=1 %To &count;
Data _null_;
set &scanfile (firstobs=&I);
call symput('Client', &field1);
call symput('LossRatio', &field2 );
call symput('Target', &field3 );    
stop;
run;

proc gkpi mode=raised;
speedometer actual=&LossRatio bounds=(0 .2 .4 .6 .8 1) /
target=&Target label="&field1 KPI" nolowbound format="percent8.0"
afont=(f="Albany AMT" height=.5cm)
bfont=(f="Albany AMT" height=.4cm) ;
Run;
%end;
%MEND SCANLOOP;

%scanloop (work.Test, Client,LossRatio,Target);run;
4

1 回答 1

0

这是额外的run;

我不知道sas为什么会这样做,但是我在自己的代码中已经看到了。有时,当程序结束时有额外的运行时,图表会打印第二个副本。

您不需要run;在宏之后,因为它不是宏语言函数,并且宏将继续运行并且没有它。最终结果是循环的最后一次行程看起来像这样(注意最后的额外运行)

proc gkpi mode=raised;
speedometer actual=&LossRatio bounds=(0 .2 .4 .6 .8 1) /
target=&Target label="&field1 KPI" nolowbound format="percent8.0"
afont=(f="Albany AMT" height=.5cm)
bfont=(f="Albany AMT" height=.4cm) ;
Run;
run;

由于上述错误(功能?),这可能是导致您的重复图表的原因。我不认为这在所有输出模式中都会发生,但是如果您使用 ods 输出到 pdf,我很确定这是您的问题。

Joe 是对的,尽管您应该尽可能避免使用宏来执行此操作。

于 2013-10-04T00:48:43.863 回答