2014-10-16 4 views
0

나는 두 개의 데이터 세트가 있습니다SAS : PROC 종류의 nodupkeys 오류

  • "어머니"- 5512 개 관찰을 어디 변수를 "어머니"= 1
  • "all_women"- 2,336,750 관찰 여기서 변수 "어머니" 다음과 같이 =

0 나는 두 가지를 결합 :

어머니는 내가 이미로 지금
data combined; 
set mothers all_women; 

n datet all_women, "MOTHER"= 1 인 관측치를 유지하는 조건으로 반복되는 엔트리를 삭제하고 싶습니다. 난 단지 5458 관찰 "어머니"= 1 왼쪽하고 있기 때문에

proc sort data=combined; by ID DESCENDING MOTHER; run; 

proc sort data=combined nodupkeys; by ID; run; 

아직 내가 어머니의 일부를 잃게 :

나는 다음 시도했다. 이 오류를 소개하기 위해 무엇을 했습니까?

+0

"어머니"의 고유 ID가 5,512 개임을 확인 했습니까? – Jeff

+0

두 데이터 세트를 함께 설정하고 첫 번째 데이터 세트와 동일한 수의 레코드를 예상하는 것은 이상한 것처럼 보입니다. 결합 된 데이터 세트에서 SET 대신 병합을 예상했을 것입니다. – Reeza

답변

2

NODUPKEY를 사용하는 대신 FIRST./LAST를 사용하십시오. 처리. 전용 (당 한 기록을 보관) 어머니 = 0을 가지고 있던 ID를 유지할 것이며, 모든 어머니 = 1 개 행을 유지하는 것

proc sort data=combined; 
    by ID DESCENDING MOTHER; 
run; 

data want; 
    set combined; 
    by ID descending mother; 
    if not (first.ID) and (mother=0) then delete; 
run; 

.

1

어머니 데이터 집합에 중복 된 ID가 있는지 확인 했습니까? 두 번째 proc 정렬은 이러한 행을 제거했을 것입니다. 당신과 같이 확인할 수 있습니다

:

proc sort data = mothers nodupkey out = mothers_dedup dupout = mothers_dups; 
    by ID; 
run; 

mothers_dups가 0보다 관찰이 포함되어있는 경우,이 문제를 차지하고 있습니다.

+0

방금 ​​확인했습니다 - 문제의 원인은 어머니 데이터 집합에 중복 된 ID가 있다는 것입니다. 그러나 나는 여러 출생에 해당하므로 이러한 중복을 유지해야합니다. "MOTHER"= 0 인 중복 만 제거하는 방법이 있습니까? – user2568648