Chapter 3. Combining Tables Horizontally Using PROC SQL - (3) - USING OUTER JOINS

Outer Joins에 대해 정리해보겠습니다. outer join은 inner join에다가 서로 매치되지 않은 행까지 추가된거라고 생각하면 되어요. 이때 서로 매치되지않은 행을 어느 기준으로 두느냐에 따라 Left & Right & Full 세 종류가 있고요, syntax는 다음과 같습니다. 



1. Using a Left Outer join 

위에 밴다이어그램 확인해보면 이해가 더 빠를텐데요. 두개의 데이터 테이블이 있어서 이걸 합치려고 하는데, 왼쪽 테이블을 기준으로 만들고, 두 테이블의 공통적인 값을 보여주려고 합니다. 


One과 Two라는 두개의 테이블을 Left Outer 방법으로 합치려고 합니다. 왼쪽이 기준이고요~ 행(row) 중에서 공통적으로 나오는 값을 보려고 합니다. 코드는 아래와 같고요. select * 라고 되어있어서 One, Two라는 열 이름이 다 보여지게 됩니다. 

 그래서 결과값의 왼쪽 두 열이 One에서 온 데이터테이블이고요. 오른쪽 두 열이 Two에서 온 데이터테이블입니다.  



결과 아웃풋 보면 X라는 열이 중복되어 나오는데요. One 데이터테이블의 X라는 열을 기준을 세우고 싶으면, select one.X, a, b 라고 따로 정해주면 됩니다. 


2. Using a Right Outer join 

두개의 데이터 테이블이 있어서 이걸 합치려고 하는데요, 서로 매칭되지 않은 행은 오른쪽 테이들에서 오게 됩니다. 이것 역시 바로 예제보면 이해 되실꺼예요. One과 Two라는 데이터가 있고요. 이때 Two의 데이터 테이블에서의 X 변수값이 3, 5가 One이라는 데이터 테이블과 매칭되지 않죠. 오른쪽 데이터 테이블에서 매칭되지 않은 파일을 가져와야하니까 결과값은 아래와 같습니다. 


3. Using a Full Outer join 

One이라는 데이터 테이블과 Two라는 데이터 테이블의 모든 행을 합칠때 쓰는 방법입니다. full join 이라고 명령어를 쓰면 되고요. 지금 X변수의 2 값이 겹치게 되고 나머지 들은 겹치지 않네요? 변수 X가  One이라는 데이터 테이블에도, Two라는 데이터 테이블에도 있어서 두번 나오게 됩니다. 


4. Comparing SQL Joins and DATA Step Match-Merges  

Proc SQL 방법을 써서 데이터를 합치는 방법이 있고요, 아니면 DATA STEP MERGE방법을 이용해서 데이터를 합칠 수도 있습니다. 지금 아래 두개의 테이블, One, Two가 있다고 해요. 보면 X라는 변수의 변수값이 모두 같네요. 이때 두 테이블을 X변수 기준으로 합쳐봅시다. 그럼 코드는 아래와 같아요. 


두 방법의 차이점은 많지만, 일단 Data Step Match-Merge방법은 run으로 끝내고 proc print방법을 이용해서 데이터를 불러와야합니다. Proc sql은 run으로 끝낼 필요가 없어요.





만약 합치려는 데이터의 X라는 변수의 변수값들이 다르다면 어떻게 될까요? 아래 Three라는 데이터 테이블과 Four라는 데이터 테이블의 X라는 변수의 변수값이 모두 일치하진 않네요. 이때 Data Step방법과 Proc SQL방법을 이용해서 데이터를 합쳤을때 결과값은 다음과 같아요. 


Proc SQL은 Full outer join 방법을 이용하는데요. 문제는 X라는 변수로 데이터를 합칠때 missing data 즉 결측값때문에 원하는 아웃풋이 안나올수도 있다는겁니다. 아래 그림의 data step과 proc sql의 아웃풋을 비교하면 어떤건지 아시겠죠. 



왜냐하면 coalesce 함수를 이용하지 않았기 때문입니다. 이 함수는 inner join에도 사용할 수 있습니다. 


SELECT COALESCE (테이블이름.변수이름, 테이블이름,변수이름) 

as 변수이름, 변수이름, 변수이름 


이렇게 적으면 됩니다. 



# sas 자격증, sas advanced programming, sas proc sql, prep guide 설명

반응형

+ Recent posts