2017-11-17 6 views
0

Ich versuche, einige Plots zu machen. Ich muss 19 Scatter-Plots machen, wobei die Namen in verf_typ_nmes in die Daten eingefügt werden und die proc-Schritte nacheinander ausgeführt werden. Ich habe Google recherchiert und dachte, ich kopiere richtig, aber nicht gut.SAS Makros zum Plotten

Fehler Ich bekomme: "Erwartete% TO nicht in% DO-Anweisung gefunden" Fehler: Ein Dummy-Makro wird kompiliert.

%macro Multiplot(); 
    %do verf_typ_nmes = BDPREP, BRCODE, CONTNT, COPAL, CURSRY, 
         DFTEST,DOCPST,DSMS,LABEL,MAILING,       
         MAILPC,MERLIN,MMS,MPCV,PRESRT,PVDS,           
         SHPAID,TAP,WEIGHT; 
    data &verf_typ_nmes; 
    set vol_verfns_prime; 
    where verif_type="&verf_typ_nmes"; 
    RUN; 
    proc sgscatter data=&verf_typ_nmes; 
    plot verif_pstg*(t_v tfev mlgs fsp avpm); 
    run; 
    %end; 
%mend; 

Antwort

2

Die %DO Aussage ist nicht so mächtig wie die DO Aussage.

Warum nicht einfach eine BY Anweisung verwenden?

proc sgscatter data=vol_verfns_prime; 
    by verif_type ; 
    where verif_type in ('BDPREP' 'BRCODE' .....); 
    plot verif_pstg*(t_v tfev mlgs fsp avpm); 
run; 

Wenn Sie dann die Liste in einer Makrovariablen und %scan() setzen über eine Liste von Namen Schleife brauchen, um die Werte eins nach dem anderen herausziehen.

Verwenden Sie kein Komma als Trennzeichen in Listen, wenn Sie es vermeiden können. Kommas erschweren die Verwendung Ihrer Liste in Funktions- und Makroaufrufen.

+2

Oder zumindest überspringe den Datenschritt mit dem where und setze einfach die Stelle in den Datenoptionen auf 'SGSCATTER' ... aber ja, die' BY' Option scheint in den meisten Anwendungsfällen am besten zu sein. – Joe

Verwandte Themen