2017-02-23 20 views
0

マクロを使用すると予想される順序でさまざまな変数が発生するかどうかを比較しようとしています。私のコードは:データステップ内でマクロ変数を複数回呼び出すSAS

%macro Order (second,first,var); 
data order; 
set data; 
if &second. > &first. then &var._Correct = 1; else &var._Correct = 0; 
if &second. < &first. then &var._Error = 1; else &var._Error = 0; 
run; 
%mend order; 
%order(B,A,AB); 
%order(C,B,BC); 

私は他の多くの変数を比較しています。問題は、マクロを実行すると、出力データセットに最後のペアのみがあることです。この例では、BCになります。私は複数の出力データセットを作ることができ、それぞれがペアを持っていることを知っていますが、それらを一緒に再結合する必要があります。 & var._Correctと& var._Errorのすべてのペアを持つデータセットを取得するにはどうすればよいですか?

答えて

1

問題は、データステップを2回書き直すことです。それは不要です。たいていの場合、このようなマクロはデータステップ全体ではなく、データステップ内の行になることがあります。

%macro Order (second,first,var); 
if &second. > &first. then &var._Correct = 1; else &var._Correct = 0; 
if &second. < &first. then &var._Error = 1; else &var._Error = 0; 
%mend order; 

data order; 
set data; 
%order(B,A,AB); 
%order(C,B,BC); 
run; 

これ以上のことがあります。私はここでいくつかの小さな問題に注意したいと思います。 &秒= &の場合はどうなりますか?あなたは間違いないし、間違いない、あるいは正しいか間違っていますか?

そして、これを行うための簡単な方法:はるかに少ないコードで変数に同じ値を入れ

%macro Order (second,first,var); 
    &var._correct = (&second. > &first.); *or GE?; 
    &var._error = (&second. < &first.); *or LE?; *only one of these two; 
%mend order; 

+0

それがうまくいった!簡単な解決策:)ありがとう – user3910919

関連する問題