지식노동자의 노트

SAS 중복 관측치 다루기(nodupkey) 본문

SAS

SAS 중복 관측치 다루기(nodupkey)

생각하는너구리 2012. 5. 16. 20:36
728x90

이번에는 SAS의 중복 관측치에 대한 얘기를 해 보려고 합니다. 중복은 크게 2가지로 나눠 볼 수 있겠습니다. 특정 칼럼값 한 개 또는 여러 개가 같은 경우와 모든 칼럼값이 같은, 즉 관측치 또는 레코드의 중복으로 구분해 볼 수 있겠죠. 하지만 레코드의 중복이란 결국 칼럼값 중복의 확장형태로 이해하시면 될 것 같습니다.


<그림1. 중복의 여러 형태>


위 그림1을 잘 관찰해 보시죠 학번 칼럼에는 971215라는 값이 무수히 중복되어 있습니다. 이름에는 '김초롱', '김사랑' 이 중복되어 있네요. 두 사람은 학번이 같은걸로 보아 개명을 한 것 같습니다. 주거지 정보를 보면 김말순은 서울에서 2012년5월8일까지 최종 거주하여 기록이 하나 뿐이고 김초롱은 부산에서 서울로, 서울에서 대전으로 이사를 다닌 것 같습니다. 그리고 최종적으로 대전에서 거주한 기록은 3건이 중복 입력되어 똑같은 기록이 3건입니다.

이런 경우 분석자가 하려고 하는 일은 대체로 (1)중복되는 값을 없애거나 (2)중복되는 값만 따로 모아보기 (3)중복되는 것 중 원하는 값(첫 번째, 마지막, 또는 특정 순서)을 제거하기 (4)중복 건수 세기 정도 입니다.

지금은 Proc Sort에서 nodupkey option을 사용하여 중복되는 값을 제거하는 예를 들어 보겠습니다.

1. 중복제거 Proc Sort nodupkey option을 사용하여

proc sort data = dup_yes out=dup_no1 nodupkey;
by 학번;
run;

<표1. 학번의 중복제거>



proc sort data = dup_yes out=dup_no2 nodupkey;
by 학번 이름;
run;

<표2. 학번과 이름이 같은 중복 제거>



proc sort data = dup_yes out=dup_no3 nodupkey;
by 학번 이름 주거지;
run;

<표3. 학번, 이름, 주거지가 같은 중복 제거>



proc sort data = dup_yes out=dup_no4 nodupkey;
by 학번 이름 주거지 최종거주일자;
run;

<표4. 모든 칼럼이 같은 중복제거>



proc sort data = dup_yes out=dup_no5 nodupkey;
by _all_;
run;

<표5. 모든 칼럼이 같은 중복 제거>



바로 감이 잡히시겠지만 key 값에 중복을 제거하는 것이 nodupkey 옵션입니다. 정렬할 때 key 로 사용하는 값이 by 이후에 나오는 변수입니다. 따라서 _all_ 을 사용한 것과 모든 변수명을 나열한 것은 차이가 없습니다.

이해를 돕기 위해 변수명에 한글을 사용했습니다.

2012/05/17 - [SAS] - SAS 한글 변수명 쓰기



반응형
Comments