본문 바로가기
Programming/SAS

[SAS 기초] Array를 통한 데이터 처리

by Kanii 2024. 12. 14.
반응형

오늘은 SAS에서 반복 작업을 수행하고자할 때 유용한 Array에 대해 공부해려고 한다.


1. Array란?

Array는 간단히 말해 '행렬'이다.

동일한 유형(문자형 혹은 숫자형)의 데이터를 그룹화하여 처리할 수 있게하는 논리적 구조이며, 여러 변수를 하나의 그룹으로 묶어 반복적인 작업을 효율적으로 만들어준다.

 

2. Array 구문

Array는 DATA step 안에서 활용이 가능하며, 기본적인 구문 형태는 다음과 같다.

ARRAY _NAME_ [I,J] X1 - XJ;

_NAME_ : Array 이름

[I,J] : Array의 차원 (I행, J열)

X1 - XJ : Array 내 각 열의 이름 (X1,X2,X3,...,XJ)



💡헷갈릴 수 있는 포인트💡

 ★ ARRAY 구문을 통해 2x3 다차원 Array를 생성할 경우, 우리가 상상하는 결과

 

  실제로 SAS가 보여주는 ARRAY 결과

SAS가 보여주는 결과를 보면, '왜 2x3 배열을 생성했는데 1x6으로 보이지?'라고 생각이 들 수 있다.

이는 배열의 본질적인 구조는 1차원 리스트로 저장되기 때문이다.

 

우리가 선언한 배열의 차원(2x3)은 1차원의 리스트에 행과 열을 나눈 논리적인 표현일 뿐이다.


위 같은 이유로 실제로 행 2개 열 3개를 갖는 Data 구조를 Array로 생성하고 싶다면, DO loop를 이용한 약간의 변형이 필요하다.

 

간단한 예로, ARRAY로 구구단 표를 만들어보자.

DATA GUGUDAN;
ARRAY GUGU[9] DAN1 - DAN9;
  DO I=1 TO 9;
  DAN=1;
    DO J = 1 TO 9;
      GUGU[DAN] = I*J;
      DAN = DAN+1;
    END;
    OUTPUT;
  END;
DROP I DAN J; /*DO loop를 위한 임시 변수 삭제*/
RUN;

ARRAY를 사용한 구구단 만들기 짜잔

Array를 선언하는 또 다른 방법은 다음과 같다.

DATA DF; SET TEST;
ARRAY _NAME_[*] _CHARACTER_; /*TEST 데이터셋 안에있는 모든 문자형 변수를 갖는 ARRAY 선언*/

ARRAY _NAME_2[*]  _NUMERIC_; /*TEST 데이터셋 안에있는 모든 숫자형 변수를 갖는 ARRAY 선언*/

※'*'는 ARRAY에 포함하도록 선언한 변수의 차원을 그대로 설정하겠다는 의미

 

3.실무에 유용한 ARRAY 예제

필자가 업무할 때 가~장~ 많이 사용하는 ARRAY 활용법은 바로 '결측 일괄 대체'이다.

 

종종 업무를 하다보면 아래와 같이 중간중간 결측을 포함한 데이터의 형태를 보게된다.

예제 데이터(SAMPLE)

 

숫자형 변수의 결측은 모두 '50'으로 대체, 문자형 변수의 결측은 모두 'Missing으로 일괄 대체를 하고싶다면, 아래와 같이 ARRAY를 활용할 수 있다.

DATA DF;SET SAMPLE;
ARRAY MISS_N[*] _NUMERIC_;
DO I = 1 TO DIM(MISS_N);
IF MISS_N(I) = . THEN MISS_N(I) = 50;
END;

ARRAY MISS_C[*] _CHARACTER_;
DO K=1 TO DIM(MISS_C);
IF MISS_C(K) = "" THEN MISS_C(K) = 'Missing';
END;

DROP I K;
RUN;

짜잔

 

4. 마무리

오늘은 SAS에서 가장 효율적으로 반복 업무를 처리할 수 있는 ARRAY에 대해 공부해보았다.

Array는 반복 작업을 간소화하고, 대량 데이터를 효율적으로 처리할 수 있는 강력한 도구로 초반에는 문법이 조금 어렵게 느껴질 수 있지만, 익숙해지면 데이터 처리 속도를 대폭 향상시킬 수 있다.


SAS 프로그래밍 시 궁금한 내용이 있다면 댓글 남겨주세요~

다음 포스팅 주제로 찾아오겠습니다.

 

도움이 되었다면 하트를 눌러주세요 ❤(づ ̄ 3 ̄)づ

 

 

728x90

댓글