본문 바로가기
SAS

[SAS] sas에서 left join시 join값(유니크값)이 두개이상 일치하는 경우 병합하는 방법

by SASBIGDATA김진휘 2014. 5. 30.

sas에서 left join시 join값(유니크값)이 두개이상 일치하는 경우 병합하는 방법에 대해서 알아보자.

간단히 설명하자면 데이터를 가로병합하는데 왼쪽 테이블 기준으로 하되 키값이 기존에는 하나였지만 키값이 2개가 일치하는 경우만 병합시키는 것이다. 그림을 통해 어떤 문제를 해결할 것인지 알아본다.

 

 

 

test1 데이터셋과 test2 데이터셋을 test1데이터셋 기준(left join)으로 가로 병합을 하는데

k변수와 j변수가 둘다 일치하는 경우에만 가로병합을 실시하는 것이다.

그럼 결과는 맨 오른쪽 그림과 같이 check가 붙으면서 병합이 되어야한다.

 

[코딩과정]

 

[예제 데이터생성]

data test1;
input k$ j$;
cards;
A T
A A
C B
H S
;
run;

 

data test2;
input k$ j$ h$;
cards;
H S CHECK
H H CHECK
T S CHECK
A A CHECK
P T CHECK
;
run;

 

[data step활용]

proc sort data=test1; by k j; run;
proc sort data=test2; by k j; run;

 

data test3;
merge test1(in=a) test2(in=b);
by k j;
if a;
run;

 

[sql문 사용]

proc sql;
create table join1 as
select a.k, a.j, b.h
from test1 a left join test2 b
on a.k=b.k and a.j=b.j ;
quit;

 

 

코딩과정을 보면 우리가 이전부터 해왔던 join과 똑같다. 방법은 기존방법과 똑같으며 아주 간단하다.

기존에는 key값(연결값)이 하나였으나, 이번에는 2개이기 때문에

proc sort시 연달아 key값을 추가적으로 입력만 하고 병합과정인 merge에서도 by 부분에 key값을 추가적으로 입력하면 된다. 더 단순하게 말하자면 그냥 기존의 코딩에서 추가되는 키값 변수를 by옆에 모두 추가하면 되는 것이다.

sql문에서도 역시 on뒤에 and문장을 추가하고 키값을 하나더 추가하면 되는 것이다.

 

www.sasbigdata.com 김진휘

 

댓글