BookmarkSubscribeRSS Feed

[SAS 고급] SAS DATA SET의 다차원 배열 로딩 (1) (Loading a Multidimensional Array from a SAS Data Set

Started ‎06-17-2020 by
Modified ‎06-17-2020 by
Views 109

[SAS 고급] SAS DATA SET의 다차원 배열 로딩 (1) (Loading a Multidimensional Array from a SAS Data Set)

 

 

안녕하세요^^

 

이번 시간에는 두 시간에 걸쳐 SAS Data set에서 다차원의 배열을 가져오는 방법에 대해 예제를 통해 알아보겠습니다.

 

 

▶ 비즈니스 시나리오는 앞선 예제와 같습니다.

▷ 각 ‘오리온 스타(Orion Star) 회사의 “실제 이익”과 “예산 이익”을 비교하는 작업을 해보겠습니다.

 

SE22017052016013170.jpg

 

▷ 사용할 SAS 데이터셋 orion.budget은 2007년부터 2011년의 예산이익이 월 단위로 작성되어있습니다.

  • 아래 데이터셋은 사용할 SAS 데이터의 일부입니다.  

 

SE22017052016030970.jpg

 

▷ 배열에서 쉽게 하드코딩 할 수 있는 값이 너무 많으면, 배열을 SAS 데이터셋에서 로드할 수 있습니다예를들어위의 데이터 구성처럼 Year 2007년부터 2011년의 변수로 존재한다면다음과 같이 배열을 SAS 데이터셋에서 로드할 수 있습니다.

 

SE22017052016035370.jpg

 

SE22017052016032670.jpg

 

 

▷ 또한, 각각의 cell에 대해서도 배열로 지정할 수 있습니다.

 

SE22017052016042370.jpg

 

SE22017052016043470.jpg

 

 

▶ 프로그램의 실행과정을 살펴보도록 하겠습니다.

 

▷ 먼저 data문이 실행됩니다.

 

SE22017052016055370.jpg

 

SE22017052016060070.jpg

 

  • 프로그램은 {1, 2007} 부터 {12. 2011} 의 B배열에 값을 할당하는 것을 목적으로 합니다.

  • 컴파일 단계에서, 배열에는 아직 값이 할당되지 않은 것을 확인할 수 있습니다.

 

SE22017052016061470.jpg

 

새로운 데이터인 budgetamt 데이터셋에 포함하지 않을 변수들을 표시해둡니다.

 

SE22017052016062670.jpg

 

 

▷ 다음으로 if 문장이 실행됩니다.

 

SE22017052016064270.jpg

 

SE22017052016065170.jpg

 

B 배열의 값은 아직 할당되지 않았습니다.

 

SE22017052016075270.jpg

 

_N_=1인 경우, Mon에 1을 할당합니다. 해당 문장은 do~end 문이기 때문에 Mon이 12가 될 때까지 do~end 안의 문장을 반복합니다.

 

SE22017052016133170.jpg

 

 

▷ 다음으로 set문이 실행됩니다.

 

SE22017052016135070.jpg

 

SE22017052016142670.jpg

 

B 배열의 값은 아직 할당되지 않았습니다.

 

SE22017052016150770.jpg

 

Orion.budget 데이터셋의 첫 번째 자료를 읽어왔습니다.

 

SE22017052016152370.jpg

 

 

▷ 이어 do~end 문장을 실행합니다.

 

SE22017052016153570.jpg

 

SE22017052016154370.jpg

 

B 배열의 값은 아직 할당되지 않았습니다.

 

SE22017052016155570.jpg

 

Do 문장을 실행시켜, Yr=2007이 입력됩니다.

 

SE22017052016160770.jpg

 

또한, B 배열에 해당하는 문장이 실행됩니다. 첫 번째 자료를 읽은 경우이므로 Mon=1, Yr=2007이므로, 다음과 같은 문장이 실행되는 것과 같습니다.

 

SE22017052016162770.jpg

 

이 결과, B{1, 2007}에 cols{2007} 값인 1590000이 입력됩니다.

 

SE22017052016164070.jpg

 

 

▷ do 문장이 end와 만나며 Yr에 2008의 값이 입력됩니다.

 

SE22017052016165370.jpg

 

SE22017052016170370.jpg

 

다시 배열 B{1, 2008}에는 cols{2008}의 값인 1880000이 입력됩니다.

 

SE22017052016172570.jpg

 

SE22017052016173370.jpg

 

 

▷ 위의 과정이 Yr이 2012가 될 때까지 반복됩니다.

 

SE22017052016174570.jpg

 

 

▷ Mon=1에 대한 do~end 문이 끝나면다시 바깥의 do문장으로 돌아가서 Mon=2의 값이 입력된다.

 

SE22017052016175870.jpg

 

SE22017052016180770.jpg

 

 

▷ 다음으로 set문이 실행되며두 번째 자료의 값이 입력됩니다.

 

SE22017052016182870.jpg

 

SE22017052016183770.jpg

 

SE22017052016184770.jpg

 

Do end 문장을 실행시켜 위의 과정을 반복합니다.

 

▷ Yr이 주어진 범위 밖인 2012가 되는 경우안에 있는 do~end 문장이 종료되며,

 

SE22017052016225170.jpg

 

SE22017052016230370.jpg

 

SE22017052016232970.jpg

 

주어진 Mon의 범 위 밖의 값인 Mon=13이 되는, 밖에 있는 do~end 문장이 종료됩니다.

 

SE22017052016234170.jpg

 

 

 

나머지 문장에 대해서는 다음시간에 이어서 살펴보도록 하겠습니다.

 감사합니다^^

 

Version history
Last update:
‎06-17-2020 03:52 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

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!

Article Labels
Article Tags