[SAS 고급] SAS DATA SET의 다차원 배열 로딩 (1) (Loading a Multidimensional Array from a SAS Data Set)
안녕하세요^^
이번 시간에는 두 시간에 걸쳐 SAS Data set에서 다차원의 배열을 가져오는 방법에 대해 예제를 통해 알아보겠습니다.
▶ 비즈니스 시나리오는 앞선 예제와 같습니다.
▷ 각 ‘오리온 스타(Orion Star) 회사의 “실제 이익”과 “예산 이익”을 비교하는 작업을 해보겠습니다.
▷ 사용할 SAS 데이터셋 orion.budget은 2007년부터 2011년의 예산이익이 월 단위로 작성되어있습니다.
아래 데이터셋은 사용할 SAS 데이터의 일부입니다.
▷ 배열에서 쉽게 하드코딩 할 수 있는 값이 너무 많으면, 배열을 SAS 데이터셋에서 로드할 수 있습니다. 예를들어, 위의 데이터 구성처럼 Year이 2007년부터 2011년의 변수로 존재한다면, 다음과 같이 배열을 SAS 데이터셋에서 로드할 수 있습니다.
▷ 또한, 각각의 cell에 대해서도 배열로 지정할 수 있습니다.
▶ 프로그램의 실행과정을 살펴보도록 하겠습니다.
▷ 먼저 data문이 실행됩니다.
프로그램은 {1, 2007} 부터 {12. 2011} 의 B배열에 값을 할당하는 것을 목적으로 합니다.
컴파일 단계에서, 배열에는 아직 값이 할당되지 않은 것을 확인할 수 있습니다.
새로운 데이터인 budgetamt 데이터셋에 포함하지 않을 변수들을 표시해둡니다.
▷ 다음으로 if 문장이 실행됩니다.
B 배열의 값은 아직 할당되지 않았습니다.
_N_=1인 경우, Mon에 1을 할당합니다. 해당 문장은 do~end 문이기 때문에 Mon이 12가 될 때까지 do~end 안의 문장을 반복합니다.
▷ 다음으로 set문이 실행됩니다.
B 배열의 값은 아직 할당되지 않았습니다.
Orion.budget 데이터셋의 첫 번째 자료를 읽어왔습니다.
▷ 이어 do~end 문장을 실행합니다.
B 배열의 값은 아직 할당되지 않았습니다.
Do 문장을 실행시켜, Yr=2007이 입력됩니다.
또한, B 배열에 해당하는 문장이 실행됩니다. 첫 번째 자료를 읽은 경우이므로 Mon=1, Yr=2007이므로, 다음과 같은 문장이 실행되는 것과 같습니다.
이 결과, B{1, 2007}에 cols{2007} 값인 1590000이 입력됩니다.
▷ do 문장이 end와 만나며 Yr에 2008의 값이 입력됩니다.
다시 배열 B{1, 2008}에는 cols{2008}의 값인 1880000이 입력됩니다.
▷ 위의 과정이 Yr이 2012가 될 때까지 반복됩니다.
▷ Mon=1에 대한 do~end 문이 끝나면, 다시 바깥의 do문장으로 돌아가서 Mon=2의 값이 입력된다.
▷ 다음으로 set문이 실행되며, 두 번째 자료의 값이 입력됩니다.
Do end 문장을 실행시켜 위의 과정을 반복합니다.
▷ Yr이 주어진 범위 밖인 2012가 되는 경우, 안에 있는 do~end 문장이 종료되며,
주어진 Mon의 범 위 밖의 값인 Mon=13이 되는, 밖에 있는 do~end 문장이 종료됩니다.
나머지 문장에 대해서는 다음시간에 이어서 살펴보도록 하겠습니다.
감사합니다^^
Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.
Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.