BookmarkSubscribeRSS Feed

[SAS 활용 노하우] Array Statement

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

■ 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

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags