Sql 为什么SAS GKPI在最后一行继续创建2个GKPI图表?

Sql 为什么SAS GKPI在最后一行继续创建2个GKPI图表?,sql,sas,kpi,Sql,Sas,Kpi,一般来说,我对编码和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; Da

一般来说,我对编码和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;

这是额外的
运行

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

你不需要
运行在宏之后,因为它不是宏语言函数,宏将继续工作,没有它。最终结果是,最后一次通过循环的行程将如下所示(请注意末尾的额外行程)

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


Joe是对的,但是如果可能的话,您应该尽量避免使用宏来进行此操作。

这真的是制作这些图表的方法吗??也许不能用by语句代替它们?这种宏循环效率极低,而且容易出错。你完全正确。很抱歉很晚才回复。
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;