BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Array Statement

Started ‎09-21-2022 by
Modified ‎09-21-2022 by
Views 1,594

■ Array statement 

Array statement는 변수 그룹으로 여러 개 변수들을 대상으로 동일한 작업을 효율적으로 하기 위해 IF-THEN statement 또는 DO-END statement 를 같이 사용합니다. 

Array 문을 사용할 때는, 시간이 단축되고 프로그램이 단순화 되는 장점이 있습니다. 

단독으로 잘 쓰지 않는 statement로 동일한 계산을 변수만 다르게 작업할 때 자주 사용됩니다.

 

 

# Array Syntax 

 

ARRAY name {#} <$> variable-list.

 

 

위는 Array statement Syntax로 DATA 단계에서 선언되며, 가장 기본적인 형식입니다. 

이미 선언된 데이터에는 Array Statement 로 선언된 변수는 새로 생성되지 않습니다. (= DATA 단계에만 동정의) 

  • name - array statement 로 새로 생성된 변수 목록으로 변수 이름을 지정할 때 동일한 설정으로 32자 이하로 한정되며 문자와 밑줄로 시작하고 그 뒤에 문자, 숫자 또는 밑줄이 올 수 있습니다.

  • {*} - {} 대신 []를 사용할 수 있으며, 목록에 있는 변수의 수와 같아야 하며, 변수의 수 대신 *로 작성 가능합니다. 이는 SAS에서 자동으로 변수의 목록을 카운팅 합니다.

  • $ - 변수가 character일 때 사용

  • variable-list - 동일한 작업을 수행하기 위한 변수 목록

 

1) ARRAY certi [5] toeic toefl teps opic gre
2) ARRAY certi [*] toeic toefl teps opic gre
3) ARRAY certi {5} toeic toefl teps opic gre
4) ARRAY certi {*} toeic toefl teps opic gre

 

 

SAS에서는 위의 1번 예시부터 5번 예시는 동일한 결과를 출력합니다. 변수의 수 (ARRAY certi [5] )를 지정하는 방법은 'Explicit Array_명시적 배열'이라고도 합니다.

위의 certi Array는 아래와 같은 1차원 배열을 생성합니다. 

SAS 구조는 1차원 배열만 사용 가능합니다. (2차원 이상의 배열은 지원하지 않습니다.)

 

 image.png

 

 

 

# Array Example

Array를 쉽게 이해하기 위해 가상의 데이터인 테스트 점수 예시를 통해 알아보겠습니다.

 

DATA test_score;
INPUT name $ Age toeic toefl teps opic gre;
ARRAY score (*) toeic toefl teps opic gre;
DO i = 1 TO 5;
IF score(i) >= 100 THEN score(i) = .;
END;
datalines;
Agatha  18 700 6 6 8 9 
Emma 20 100 9 900 9 1 2 
Gabriel 17 9 9 11 1 10
Julia 21 9 9 10 10 10 
;
PROC PRINT DATA = test_score;
TITLE 'score';
RUN;

 

 image (11).png

 

 

 

 위의 코드를 보면, raw-data [test_score]에 첫 번째 칼럼에는 name 변수가 있고, 2번째 변수부터 5번째 변수는 영어 certification에 관한 점수 변수로 toeic, toefl, teps, opic, gre 점수 변수가 있습니다.

 

 

ARRAY score (*) toeic toefl teps opic gre;

 array statement로 score 변수를 만들어 score 결과값을 나오게 합니다.

 

 

 

 

DO i = 1 TO 5;
IF score(i) >= 100 THEN score(i) = .;
END;

 

 

DO 루프를 통해 처음으로 변수 I의 값은 1이고 5까지 증가하는 반복 변수를 생성합니다.

score 변수는 기존의 100이상의 값은 결측값 처리를 만듭니다.

(각 영어 certi변수는 100점 이상은 나올 수 없는 값으로 가정의 상황을 만들었습니다.)

만약, Array statement 를 사용하지 않고, IF-THEN 조건문을 만들 때는 아래와 같은 code를 가집니다.

 

 

IF toeic >= 100 THEN toeic = .;
IF toefl >= 100 THEN toefl = .;
.
.
.
 

 

 

 

 

  •  변수 목록 간단 설정 

위와 같이 Array 문을 작성하거나 다른 statement 를 사용할 때, 변수 목록을 나열해야 하는 경우가 있습니다.

 

 

ARRAY[*] x1 x2 x8 x8 y1 y2 y3 y4 y5 y6 y7 y8;
ARRAY[*] x1 x2 x8 x8 y1-y8;

 

 

위와 같은 경우, y1 부터 y9를 다 나열할 필요없이, 'y1-y8' 과 같이 축양된 목록으로 바꿔 코딩을 간단히 할 수 있습니다. 위는 shortcut으로 마지막 문자는 숫ㄴ자형태로 sequential한 숫자로 구성되어야 합니다.

# Example1

 

INPUT x1 x2 x3 x4 x5;
INPUT x1 - x5;

 

 

위의 조건을 벗어나지 않는 한에서, mean, sum, sd, var 등 다양하게 변수 목록을 넣을 수 있는 syntax에는 사용할 수 있다. 

# Example2

 

만약 변수가 연속된 문자로 구성되지 않고, 위의 test_score의 예제와 같이 age, toeic 등 변수끼리 이름의 일관성이 없을 경우 변수 사이에 '--' 넣으면 됩니다.

 

 

INPUT name $ Age toeic toefl teps opic gre;

 

INPUT TOEIC -- GRE

 

Version history
Last update:
‎09-21-2022 09:14 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags