본문 바로가기
의학통계/SAS Tip

성능향상을 위한 SAS코딩 Tip

by boogler 2022. 6. 30.
반응형

성능향상을 위한 SAS코딩 Tip

 

데이터 용량이 점점 커지면서 SAS 코딩할때에도 효율적인 코딩이 필요해 지고 있습니다. 아주 간단하게 몇가지를 코딩습관으로 가지게 되면 용량이 큰 데이터를 handling할때 성능향상에 도움이 될 것으로 생각됩니다.

간단한 것부터 정리해 나가보겠습니다.


데이터 셋의 속성변환은 Proc datasets 를 이용하기

 

날짜나 숫자의 경우 데이터셋을 만든 후 포맷문을 통해 속성을 변환할때 Data Step 문 대신 Proc Datasets 문을 사용하는 것이 코드의 성능향상에 유리합니다. Data Step 문은 속성을 변환할때 전체 data를 읽는 과정이 있기때문에 시간이 더 사용됩니다.

 

EX. 날짜 포맷을 yyyy-mm-dd 형태로 변경하고, 숫자는 소숫점 한자리로 표현하고, ID 변수의 Label 명을 Subject ID 로 변경하기

 

Proc datasets 를 이용한 성능향상

 

데이터셋 생성시 IF 보다는 Where를 사용하자.

 

IF 문장은 전체 데이터를 읽은 후 조건에 맞는 데이터만 남기게 되고, Where 는 처음부터 조건에 맞는 데이터만 read하게 되어 데이터의 처리량이 더 작게 됩니다.

 

Where 문을 사용하자

 

Temp 데이터셋은 공간절약을 위해 정리하면서 데이터 작업을 하자.

 

* Work library에서 특정 Table만 삭제하기
proc datasets library=work nolist; delete test_data1 test_data2; run;quit;

* Work library의 모든 Table 삭제하기
proc datasets library=work memtype=data kill nolist; run;quit;

 

변수 정의할때 가능하면 Length를 정의하자

 

특히 숫자형의 경우 default가 8byte 로 0, 1 도 각각 8 byte로 저장하게 된다. 범주형 데이터로 저장할때 가능하면 '0', '1', '2', '3' 의 문자로 저장하면 size감소를 할수 있고, 숫자형인 경우 Length문을 이용해 구체적인 사이즈를 지정해 주는 것이 유리하다.

댓글