以下のDATAステップは、SASマクロの一部です。データセットreturn_checkを読み取るときにチェックする必要がある2つの条件があります。第1または第2の条件が満たされる場合、マクロ変数「Data_status」は文字列値「Exclude」を取るべきである。いずれの条件も満たされない場合、マクロ変数 "Data_status"は文字列値 'Include'を取るべきです。データステップを実行すると、最初の条件が満たされます。これは、データセットcheck2の変数 "Status"が文字列値 "Exclude"を持っていることから明らかです。しかし、ここで私が困惑しているのは、DATAステップの後で、マクロ変数Data_statusが "Include"に解決されるということです。私は何が間違っているのか分かりません。どんな助力も高く評価されます。ここでSASのIf-Thenとマクロ変数の矛盾
%macro analysis;
----------codes not shown--------
proc means data=temp noprint; *A prior step that produces the input dataset return_check;
var ret;
by event_id ab_:;
output out=return_check nmiss=missing_ret;
run;
data check2;
set return_check;
if Ab_M2=Ab_m1=ab_0=Ab_1=Ab_2=0 and missing_ret>(_FREQ_-50) then do; *Condition 1;
call symput('Data_status','Exclude');
Status=symget("Data_status");
end;
else if ab_M1=1 and ab_0=1 and ab_1=1 and missing_ret=1 then do; *Condition 2;
call symput('Data_status','Exclude');
Status=symget("Data_status");
end;
else do;
call symput('Data_status','Include');
Status=symget("Data_status");
end;
run;
%put &Data_status;
%if &Data_status eq %bquote(Exclude) %then %do;
%mend analysis;
----------codes not shown--------
は、事前にお時間を
Ab_M2 Ab_M1 Ab_0 Ab_1 Ab_2 _TYPE_ _FREQ_ missing_ret
0 0 0 0 0 0 100 100
0 0 0 0 1 0 1 1
0 0 0 1 0 0 1 1
0 0 1 0 0 0 1 1
0 1 0 0 0 0 1 1
1 0 0 0 0 0 1 1
おかげ
問題を再現できるサンプルデータセットを提供してください。 – user667489
プログラムは、入力データセットの最後の観測での変数値に基づいてマクロ変数を設定しています。 – Tom
あなたの提案user667489に感謝します。入力データセットを追加しました。 –