私は以下のようなコードを持っています
data master;
input id name $ status $;
datalines;
1 B b
2 C c
3 A a
;;;;
run;
PROC SQL;
ALTER TABLE master
ADD PRIMARY KEY (id);
QUIT;
data transaction;
input name $ status $;
datalines;
A f
F f
E e
D d
B z
C x
;;;;
run;
proc sort data = master;
by name;
run;
proc sort data = transaction;
by name;
run;
トランザクション データセットをマスター データセットにマージし、マスターからの値をトランザクション データセットからの値で更新したいと考えています。これを達成するには、以下のコードを使用できます
data have;
retain _maxID;
merge have addon;
by name;
if id = . then id = _maxID + 1;
_maxID = max(id, _maxID);
run;
結果は次のようになります
id name status
3 A f
1 B z
2 C x
4 D d
5 E e
6 F f
ただし、マスター データセットがリセットされ、マスター データセットの id 列の主キー制約が失われました。
私の知る限り、マージ、設定、および更新コマンドは、現在のデータセットを更新するのではなく、新しいデータセットを作成します。
変更ステートメントは現在のデータセットを更新する唯一のステートメントですが、上記のコードのマージ ステートメントを変更に置き換えても機能しません。
マージ後にマスター データセットの主な制約を元に戻すことでこの問題を解決できますが、これは良い解決策ではありません。
これ以外に方法はありますか?助けていただければ幸いです。事前に感謝します。