2017-05-18 10 views
0

私は古い質問をします。私はコードを持っていて、これまでの質問を見たことがあるが、私は間違いを訂正することができない。以下はダミーデータのコードです。変数の名前をマクロに渡すことができません。変数リストをsasマクロに読み込む

data x;                                 
inputs x$ y z;                               
datalines;                                
a 23 34                                 
b 34 43                                 
a 23 54                                 
b 87 78                                 
a 12 32                                 
b 22 33                                 
;                                  
run; 

は今、私はその後、私はマクロ記述変数

%let name_list=y z; 

のリストを作成します。

%macro mixed;                               
    %let j=1;                                
    %let first=%scan(&name_list.,%eval(&j));                        
    %do %while (&first ne);                   

     proc mixed data=x;                           
      class x;                            
      model &name_list.=;                          
      random x;                            
    ods output covParms=cov1;                          
    run;                             
    %let j=%eval(&j+1);                            
     %let first=%scan(&name_list.,%eval(&j));                       
    %end;                                 
    run;                                 
%mend;                                 

%mixed; 

いくつかこれが機能していませんか。どんな助けもありがとう。

+0

あなたのマクロコードは機能しますが(改善することはできます)。 「うまくいかない」とはどういう意味ですか? PROC MIXEDのために生成しようとしているMODEL文は何ですか?今、あなたは 'model y z =;'を生成していますが、これが問題になる可能性があります。 – Quentin

+0

マクロ呼び出しの前に 'options mprint mlogic symbolgen;'を追加することは、少なくとも診断に役立つかもしれません。 – Hugs

答えて

0

リストの名前を繰り返し処理する場合は、通常の%DO ... %TOループを使用できます。カウンターを手動で初期化またはインクリメントする必要はありません。

%do i=1 %to %sysfunc(countw(&name_list)); 
    %let name=%scan(&name_list,&i); 
.... place code here that uses &NAME .... 
%end; 
+0

COUNTW(初期のv9では?)の作成は、項目のリストをもっと簡単にループさせることに同意しました。私は通常、countwの区切り文字を指定します。つまり、 '%do i = 1%to%sysfunc(countw(&name_list、%str()));'リストがNULLの場合、エラーではなく0を返します。 – Quentin

+0

ありがとうございます。それは今働く。今私は1つのデータセットに結果を追加したいと思います。それにもかかわらず、私はアイデアを持っていて、それについて作業します。回答は高く評価されています。 – Nupi

+0

PROC APPENDを使用して、結果セットをまとめます。 – Tom

関連する問題