have
次のような複数の変数を持つ 1 つのエントリで呼び出されるデータセットがあります。
message reference time qty price
x 101 35000 100 .
上記のデータセットは、ループ内で毎回変更されます。ここでmessage
は、="A" にすることができます。message
="X"の場合、これは MASTER セットから 100 数量を削除することを意味し、その数は MASTER データベース内のreference
数と同じです。= reference
。=101price
の下の MASTER データベースに既にあるためです。reference
MASTER データベースは、利用可能な数量のある価格で利用可能なすべての注文を集約します。次のループでmessage
="A" の場合、have
データセットは次のようになります。
メッセージ 参照時間 数量 価格 A 102 35010 150 500
reference
これは、MASTER データベースに新しい番号を追加することを意味します。つまり、append
MASTERへのラインへ。
message
Xがある場合に MASTER データベースの数量を更新するために、ループに次のコードがあります。
data b.master;
modify b.master have(where=(message="X")) updatemode=nomissingcheck;
by order_reference_number;
if _iorc_ = %sysrc(_SOK) then do;
replace;
end;
else if _iorc_ = %sysrc(_DSENMR) then do;
output;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSEMTR) then do;
_error_ = 0;
end;
else if _iorc_ = %sysrc(_DSENOM) then do;
_error_ = 0;
end;
run;
を使用しreplace
て数量を更新します。しかし、price
= のエントリ以来。がmessage
X の場合、上記のコードはprice
='.'を設定します。where reference
=101 ステートメントを介して MASTER でreplace
...これは望ましくありません。したがって、データセットの価格列 is message
=Xを削除することをお勧めしhave
ます。message
しかし、このコードを使用しているため、=A の場合に列 price を削除したくありません
proc append base=MASTER data=have(where=(msg_type="A")) force;
run;
したがって、私はこのコード価格を私のModify
声明に持っています:
data have(drop=price_alt);
set have; if message="X" then do;
output;end;
else do; /*I WANT TO MAKE NO CHANGE*/
end;run;
しかし、それは私が望むことをしません。メッセージが X と等しくない場合、列を削除したくありません。X に等しい場合は、列を削除します。上記のコードを機能させるにはどうすればよいですか?