2013-07-26 2 views
2

Je suis assez nouveau pour le codage et SAS en général. J'ai essayé de créer un ensemble de graphiques KPI qui correspondent au nombre de lignes, mais le code de boucle ci-dessous crée deux des mêmes graphiques GPKI pour la dernière ligne. pourquoi est-ce le cas? Toute aide est la bienvenue.Pourquoi SAS GKPI continue de créer 2 graphiques GKPI pour la dernière rangée?

Merci

%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; 
+0

Est-ce vraiment le moyen de faire ces cartes? Ils ne pourraient pas être faits en utilisant une déclaration BY à la place, peut-être? Ce type de macro est terriblement inefficace et sujet aux erreurs. – Joe

Répondre

0

Il est le run;

supplémentaire Je ne sais pas pourquoi cela ne sas, mais je l'ai vu dans mon propre code. Parfois, les graphiques impriment une deuxième copie lorsqu'il y a un cycle supplémentaire à la fin du programme.

Vous n'avez pas besoin de run; après une macro car ce n'est pas une fonction de langage macro et la macro ira de l'avant et fonctionnera sans elle. Le résultat final est que le dernier voyage à travers la boucle ressemblera à ceci (notez le terme supplémentaire à la fin)

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; 

En raison du bogue mentionné ci-dessus (fonction?), Ce qui est probablement ce qui est à l'origine de votre tableau en double . Je ne pense pas que cela se produise dans tous les modes de sortie, mais si vous utilisez ods pour produire un pdf, je suis assez sûr que c'est votre problème. Joe a raison cependant que vous devriez essayer d'éviter cela avec une macro si possible.

+0

Vous avez absolument raison. Désolé pour la réponse très tardive. – user2624318

Questions connexes