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 130

[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-white.png

Our biggest data and AI event of the year.

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.

 

Register now!

Article Labels
Article Tags