본문 바로가기
SAS

[SAS] sas에서 코딩방법에 따른 처리 속도의 차이(if문의 위치)

by SASBIGDATA김진휘 2014. 5. 16.

sas로 빅데이터를 핸들링하면서 항상 답답하고 문제되는것이 처리속도 시간이다.

큰데이터를 다룰수록 속도와의 전쟁인데, 각자 자기만의 스타일로 다양하게 프로그래밍하지만

코딩을 가장 최적화 시키면, 데이터가 크면 클수록 처리속도 시간의 차이는 엄청나다.

 

 

아래의 간단한 예를 보고 data step에서 if문 코딩을 최적화하는 방법을 알아보도록 하자.

 

                             

 

위의 두개의 데이터셋 생성의 조건은 다음과 같다.

test 데이터셋의 department변수에서 기획부값만 가져오고 각각 사칙연산의 결과를 나타내는 변수를 생성하라.

 

 

위의 결과 처럼 코딩의 순서는 다르지만 결과는 같다.

하지만 만약 이 데이터가 예제와 달리 방대한 양의 데이터라면 이 두가지의 코딩 처리속도는 분명히 차이가 난다.

 

왼쪽의 코딩은 if문이 먼저 나타나 기획부값인 것에 대해 각각의 result 연산 계산을 처리한다.

하지만 오른쪽 코딩은 모든 department 값에 대해 연산을 다한후 거기에서 기획부 값을 찾는 것이다.

 

위의 두줄 글만 보아도 왼쪽코딩이 처리속도가 빠를 것이라고 예측이 된다. 결과 또한 그렇다. 왼쪽이 빠르다.

이처럼 각자 프로그램 짜는 방식이 다르지만 프로그램 처리방법을 생각한다면 최적의 코딩이 있는 것이다.

 

데이터가 작다면 차이를 못느끼고 굳이 신경써서 코딩을 짤 필요는 없지만

방대한 빅데이터를 다루고 타임라인이 있다면, 최적의 코딩을 습관적으로 사용하는 것이 가성비가 높다.

 

추가적으로 위의 예제에서 더 빠르게 처리할 수는 없을까?

생각해보자. if문을 이용해 department가 기획부인 것을 가져온다는 조건인데

아예 test파일을 set하는 과정에서 set test(where=(department='기획부')); 이런식으로 가져온다면

더 처리속도가 빠르지 않을까?

이처럼 조금만 생각해 본다면 처리속도를 줄일 수 있고, 코딩을 최적화 할수가 있다.

 

www.sasbigdata.com 김진휘

 

 

 

댓글