1
我的代碼如下SAS數據步合併/修改2個數據集,但仍保持完整性constrants(PK)的主數據集
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列主數據集。
據我所知,合併,設置和更新命令創建新的數據集,而不是更新當前數據集。
修改語句是唯一一個更新當前數據集,但用上面的代碼替換合併語句與修改不起作用。
我可以通過在合併後在主數據集上恢復主約束來解決此問題,但這不是一個好的解決方案。
除此之外還有其他方法嗎?感謝您的幫助,並提前致謝。
基思我加在你的答案的鏈接,我會使用修改/ IORC以前回答過類似的問題。這個代碼有點不那麼通用,但更具描述性,因此可能有用。 – 2013-04-09 23:06:08
感謝您的答案和非常有幫助的Sugi文章。就像Rob的回答中那樣,我不知道select可以在數據步驟中使用。再次感謝Keith&Rob。 – 2013-04-10 02:00:34