У меня есть код, как показано ниже
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 основного набора данных.
Насколько я знаю, команда слияния, установки и обновления создает новый набор данных, а не обновляет текущий набор данных.
Оператор изменения — единственный, который обновляет текущий набор данных, но замена оператора слияния из приведенного выше кода на изменение не работает.
Я мог бы решить эту проблему, восстановив первичное ограничение в основном наборе данных после слияния, но это не очень хорошее решение.
Есть ли другой способ, кроме этого? Помощь приветствуется и заранее благодарна.