[BASE SAS기초] Combining SAS Data Sets(2)
안녕하세요^^
오늘은 지난시간에 이어 Combining SAS Data Sets 두번째 시간으로, MERGE문을 다양한 경우에 적용시켜 보겠습니다.
MERGE문장은 둘 이상의 SAS 자료들을 관측별로 병합하여 새로운 SAS자료를 만드는 문장이며, 이에 대해 지난시간에 공부해보았습니다. 오늘은 data를 match하여 병합하는 방법들에 대해 공부해보도록 하겠습니다.
우선, 데이터 match-merging은 일대일 병합(One-to-one)과 짝짓기 병합(Match merge)로 나눌 수 있습니다.
오늘은 간단히 일대일 병합에 대해 공부해보도록 하고, 짝짓기 병합은 다음 시간에 추가적으로 공부하겠습니다.
One-to-one(일대일 병합)
기본적인 MERGE문장의 form은 아래와 같습니다.
DATA SAS-data-set; MERGE SAS-data-set1 SAS-data-set2 … ; BY by-variable(s); RUN; |
일대일 병합은 하나의 관측값이 다른 데이터의 하나와 연관되어있는 데이터의 병합을 말합니다.
단, BY문장을 사용하기 위해서는 공통변수를 기준으로 SAS 자료의 순서화가 선행되어야 합니다.
순서화는 PROC SORT 프로시저를 사용하면 재순서화가 가능합니다.
PROC SORT DATA = input-SAS-data-set; <OUT = output-SAS-data-set>; BY by-variable(s); RUN; |
SORT 프로시저는 SAS 데이터셋의 순서를 재정렬하는 것을 말하며, 여러 개의 변수에 대해 순서화도 가능합니다.
BY문장의 ASCENDING(오름차순)이 default값이며, DESCENDING 옵션을 넣으면 순서를 내림차순으로 정렬합니다.
데이터 병합은 위의 그림처럼 이루어지며, 만일 두 자료의 관측수가 다르면 그 중 관측수가 많은 쪽 기준으로 병합됩니다. 따라서 이 경우에 관측수가 모자라는 변수들의 데이터 값은 전부 결측값으로 처리됩니다.
예를들어,
위의 코딩으로 생성한 데이터가 있습니다.
FIRST, GENDER, EMPID를 변수로 갖는 EMPSAU 데이터와, EMPID, PHONE을 변수로 갖는 PHONEH 데이터입니다.
이제 EMPSAU(좌측)데이터와 PHONEH(우측)데이터를 일대일 병합해보겠습니다
MERGE문을 사용하고 공통변수인 EMPID를 BY문장에 지정하면, 두 데이터가 일대일 병합된 EMPSAUH데이터를 만들 수 있습니다. 이는 EMPID를 기준으로 먼저 작성해준 EMPSAU데이터에 PHONEH데이터가 더해진 형태로 이해할 수 있습니다.
즉, MERGE문에서 데이터를 입력하는 순서도 데이터의 형태에 영향을 끼친다고 할 수 있습니다.
위의 예시의 MERGE문의 데이터 순서를 바꿔보면,
앞서 만들었던 데이터와 같은 데이터지만 변수의 순서가 바뀐 것을 확인하실 수 있습니다.
일대일 병합의 경우 데이터의 순서는 영향을 끼치지 않지만, 짝짓기 병합의 경우 MERGE문장의 데이터 순서가 결과에 영향을 끼칠 수 있으니 주의해주셔야 합니다.
※ Eliminating Duplicates(반복 제거)
Proc sort문에서는 NODUPKEY라는 옵션을 사용하면 BY문장에서 지정해주는 변수를 기준으로 반복되는 데이터를 쉽게 제거할 수 있습니다.
예를들면,
FIRST, GENDER, EMPID를 변수로 갖는 EMPSDUP 데이터가 있을 때,
변수 EMPID를 기준으로 NODUPKEY 옵션을 사용하면, 반복되는 EMPID가 있는 records(obs 4, 5)는 제거된 것을 확인하실 수 있습니다.
이상 MERGE문장의 일대일 병합에 대해 공부했습니다.
다음시간에는 MERGE문장의 짝짓기 병합에 대해 공부하겠습니다.
읽어주셔서 감사합니다^^
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.