我有如下代码
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 列的主键约束。
据我所知,合并、设置和更新命令创建新数据集,而不是更新当前数据集。
modify 语句是唯一更新当前数据集的语句,但是将上述代码中的 merge 语句替换为 modify 不起作用。
我可以通过在合并后恢复主数据集的主要约束来解决这个问题,但这不是一个好的解决方案。
除了这个还有其他方法吗?帮助表示赞赏,并提前感谢。