■ 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차원 이상의 배열은 지원하지 않습니다.)
# 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;
위의 코드를 보면, 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
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.