[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 문장이 종료됩니다.
나머지 문장에 대해서는 다음시간에 이어서 살펴보도록 하겠습니다.
감사합니다^^
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!