sas를 이용하여 필요한 데이터를 구축하기 위해서  데이터 병합 작업을 많이 하게 된다.

쉽게 말해 sas로 데이터를 붙이고 짜르고 하는 작업이 빈번하게 발생한다는 말이다.

 

데이터 가로 병합(merge)을 흔하게 사용하는데

데이터가 작을 경우에는 어떤 병합 방법을 사용해도 처리시간이 거의 차이가 없지만,

데이터가 크면 클수록 시간이 오래 걸리기 때문에 처리시간을 단축시키는 방법을 찾게 된다. 

 

sas에서 full join merge를 한다는 기준으로 두가지 방법(proc sql문, proc sort문)을 보고

어떤 것이 처리시간이 빠른지를 알아보도록 하자.

 

당연히 같은 결과를 출력하는데 여러가지 방법이 있다면 빠르게 처리 할수 있는 방법을 아는 것이 실무에 많은 도움이 될 것이다.

 

 

 

위의 사진에서 두가지 방법 위에 주석을 달아 표시하였다.

코딩을 간단하게 설명하자면

처음에는 proc sql문을 이용해서 sample 데이터셋과 sample_part라는 데이터셋을 full join merge하여

sql_merge라는 데이터셋을 생성하는 것이다.

 

두번째도 같은 데이터를 가지고 각각 proc sort후에 merge하는 방법으로 동일한 작업이지만 방법이 다를 뿐이다.

 

[실험 데이터셋 설명]

sample 변수 : 연결변수값인 key변수를 포함한 총 4개의 변수로 구성

sample 관측치 : 약 714만건

 

sample_part 변수 : sample변수에서 key값만 그대로 가져왔으며, x라는 변수를 생성하여 값을 줌. 변수 2개로 구성

sample_part 관측치 : 동일하게 약 714만건

 

 

[실험결과]

 

merge 방법 

세부과정 

 처리시간 

총 처리시간 

proc sql로 merge 방법

       sql merge

         1분 26.73초 

               86.73초

proc sort후 merge 방법

       sample sort

         1분 15.25초 

              145.00초

       sample_part sort

         1분 00.50초 

       merge

                9.25초 

 

결론은 proc sql을 이용하여 merge하는 방법이 proc sort로 merge 하는 방법보다 빠른 처리 속도를 보였다.

 

처리시간은 sas로그창의 sas실행시간을 기준으로 측정하였으며, 동일한 컴퓨터로 cpu등의 처리 속도 차이가 나지 않기 위해 실험마다 재부팅 직후 sas 프로그램만 실시한 상태에서 진행 하였다.

 

반복측정시에도 sql문이 월등한 처리속도를 보여주었으며,

데이터 크기를 7천만건 7억건 늘렸을 경우에도 역시 sql문이 처리 속도가 빨랐으며,

데이터 크기가 커지면 커질수록 처리시간의 차이 또한 커졌음을 알 수 있었다.

데이터 크기가 작을 경우에는 처리시간의 차이가 거의 없었다.

 

참고로 기본적인 것이지만 sql문에서는 sort(정렬)과정이 필요없다. 하지만 data구문에서 병합(merge 또는 set)을 할 경우에는 그 전에 각각의 데이터가 정렬이 되어 있어야 병합이 가능하기 때문에 sort과정을 거쳐야만 한다.

 

이론적으로 sql문이 sort과정이 생략이 되니 병합이 빠르지 않냐라고들 알고 있다. 하지만 실제로도 그런지 눈으로 확인하기 위해 이 작업을 실시해 보았다.

 

sasbigdata.com 김진휘