2017-11-17 3 views
0

私はいくつかのプロットを作ろうとしています。 verf_typ_nmesの名前をデータに代入して19個の散布図を作成し、一度に1つずつ手順を実行してから実行する必要があります。私はGoogleを研究し、正しくコピーされているとは思っていたが良いとは思っていなかった。プロット用マクロ

エラー: "%DOが%DO文で見つかりません" エラー:ダミーマクロがコンパイルされます。

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

答えて

2

%DO文はDOの文ほど強力ではありません。

BYステートメントを使用するだけではどうですか?

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; 

あなたが名前のリストをループする必要がある場合は、マクロ変数にリストを入れて、値を1ずつを引き出すために%scan()を使用しています。

%let list= 
    BDPREP BRCODE CONTNT COPAL CURSRY DFTEST DOCPST DSMS LABEL 
    MAILING MAILPC MERLIN MMS MPCV PRESRT PVDS SHPAID TAP WEIGHT 
; 
%do i=1 %to %sysfunc(countw(&list)); 
    ... 
    where verif_type="%scan(&list,&i)"; 
    ... 
%end; 

避けることができる場合は、カンマを区切り記号として使用しないでください。カンマは、関数とマクロ呼び出しでリストを使用するのが難しくなります。

+2

少なくとも、どこでデータ・ステップをスキップして、 'SGSCATTER'のデータ・セット・オプションにどこに置いてください。しかし、ほとんどの使用例では' BY'オプションが正しいと思われます。 – Joe

関連する問題