반응형
성능향상을 위한 SAS코딩 Tip
데이터 용량이 점점 커지면서 SAS 코딩할때에도 효율적인 코딩이 필요해 지고 있습니다. 아주 간단하게 몇가지를 코딩습관으로 가지게 되면 용량이 큰 데이터를 handling할때 성능향상에 도움이 될 것으로 생각됩니다.
간단한 것부터 정리해 나가보겠습니다.
데이터 셋의 속성변환은 Proc datasets 를 이용하기
날짜나 숫자의 경우 데이터셋을 만든 후 포맷문을 통해 속성을 변환할때 Data Step 문 대신 Proc Datasets 문을 사용하는 것이 코드의 성능향상에 유리합니다. Data Step 문은 속성을 변환할때 전체 data를 읽는 과정이 있기때문에 시간이 더 사용됩니다.
EX. 날짜 포맷을 yyyy-mm-dd 형태로 변경하고, 숫자는 소숫점 한자리로 표현하고, ID 변수의 Label 명을 Subject ID 로 변경하기
데이터셋 생성시 IF 보다는 Where를 사용하자.
IF 문장은 전체 데이터를 읽은 후 조건에 맞는 데이터만 남기게 되고, Where 는 처음부터 조건에 맞는 데이터만 read하게 되어 데이터의 처리량이 더 작게 됩니다.
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문을 이용해 구체적인 사이즈를 지정해 주는 것이 유리하다.
'의학통계 > SAS Tip' 카테고리의 다른 글
SAS에서 Index 만드는 3가지 방법 (0) | 2022.07.09 |
---|---|
SAS에서 Wide, Long 포맷 데이터 변환하기 (0) | 2022.07.04 |
SAS에서 중복된 데이터 제거하기 (0) | 2022.06.23 |
Univariate 를 이용하여 percentile 구하기 (0) | 2022.06.23 |
Proc Rank 를 이용한 SAS 순위 정하기 (0) | 2022.06.23 |
댓글