내가, 내가 데이터 집합을 마스터 할 수있는 트랜잭션 데이터 집합을 병합하려는SAS 데이터 단계 병합/2 개 데이터 세트를 수정하지만 여전히 마스터 데이터 세트
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;
아래로 코드가 업데이트에 대한 무결성 제한에 관한 (PK)을 유지 트랜잭션 데이터 세트의 값을 가진 마스터의 값입니다. 이를 위해, 나는 결과는 그러나이
id name status
3 A f
1 B z
2 C x
4 D d
5 E e
6 F f
과 같을 것이다
data have;
retain _maxID;
merge have addon;
by name;
if id = . then id = _maxID + 1;
_maxID = max(id, _maxID);
run;
아래의 코드를 사용할 수있는 마스터 데이터 세트가 재설정되고 난의 id 컬럼에 기본 키 제약 조건을 잃었다 마스터 데이터 세트.
내가 아는 한, 병합, 설정 및 업데이트 명령은 현재 데이터 집합을 업데이트하지 않고 새 데이터 집합을 만듭니다.
modify 문은 현재 데이터 집합을 업데이트하는 유일한 명령이지만 위 코드의 병합 문을 modify로 바꾸는 것은 작동하지 않습니다.
병합 후에 마스터 데이터 집합의 기본 제약 조건을 복원하면이 문제를 해결할 수 있지만 좋은 해결책은 아닙니다.
다른 방법이 있습니까? 도움이 감사 드리며 미리 감사드립니다.
키스는 내가/iorc을 수정하여 이전에 대답했던 비슷한 질문에 대한 답에 링크를 추가했다. 코드는 다소 덜 일반적이지만 더 유용하기 때문에 유용 할 수 있습니다. –
답변과 매우 유용한 스기 기사를 보내 주셔서 감사합니다. Rob의 대답과 마찬가지로 Select가 데이터 단계 내에서 사용될 수 있는지 알지 못했습니다. 다시 한 번 감사드립니다, Keith & Rob. –