BookmarkSubscribeRSS Feed

[SAS 고급] 1차원 배열: 예시 (One-Dimensional Arrays: Example)

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

[SAS 고급] 1차원 배열: 예시 (One-Dimensional Arrays: Example)

 

 

​안녕하세요^^

이번 시간에는 lookup 테이블에 1차원 배열을 사용하는 예시를 살펴보도록 하겠습니다.

 

 

▶ 비즈니스 시나리오는 다음과 같습니다.

 '각 직원의 연도별 연소득'과 '해당 연도의 전체 직원 평균 연소득'의 차이를 산출하는 작업을 해보겠습니다.

 

SE22017041920223470.png

 

 

▷사용할 자료는 orion 라이브러리의 (1) salarystats 데이터셋과 (2) employeepayroll 데이터셋입니다.

 

(1) salarystats 데이터셋

1978년 부터 2011년 까지, 해 마다의 전체 직원의 평균연소득(AvgSalary) 값을 포함하고 있습니다.

(이 자료가 array를 생성하여 가져올 자료입니다.)

 

SE22017041920230570.png

 

(2) employeepayroll 데이터셋

직원(EmployeeID) 별 연소득과 고용일자가 포함되어 있습니다.

 

SE22017041920232270.png

 

 

 Table Lookup를 사용하여 데이터를 결합해보겠습니다.

 1차원 배열(salarystats 데이터셋)을 생성하여 결과를 산출할 코드는 다음과 같습니다.

▷ 이 코드에서 핵심 프로그램은 아래 두 가지입니다. (이후 구체적인 절차를 살펴보도록 하겠습니다.)

 

SE22017041920234270.png

 

array 문을 사용하여, 1978부터 2011까지 자리에(즉, 34(=2011-1977)개의 자리에)

Yr1978, Yr1979, ... , Yr2011이라는 변수명을 차례로 갖는 yr 배열을 생성할 것입니다. 

 

SE22017041920235670.png

 

yr배열의 YearHired(고용된 연도자리의 값을 Average 변수값으로 할당할 것입니다.

여기서 YearHired값은 year함수를 사용해 추출한 고용연도값입니다. 

 

 

▷ 그럼먼저 프로그램의 컴파일 과정을 살펴보겠습니다.

 

- 먼저 format문이 컴파일되어 Salary, Average, SalaryDif 변수에 대한 공간을 생성합니다.

 SE22017041920245270.png 

SE22017041920252070.png

 

다음으로 array 문장이 컴파일됩니다 34개 자리를 갖는 1차원 배열 공간이 생성된 것을 확인할 수 있습니다.

 SE22017041920254770.png 

SE22017041920255870.png

 

이어 if문이 컴파일되어첫번째 관측치일 경우에 salarystats 데이터셋의 Statistic 변수값이 ‘AvgSalary’인 관측치들만 가져오도록 코딩하였습니다.

따라서 이 때 사용된 변수인 Statistic 변수의 공간을 생성된 것을 알 수 있습니다.

SE22017041920261070.png 

SE22017041920262070.png

 

다음은 set 문이 컴파일되어, employee payroll 데이터셋에서 세 변수를 가져오게 됩니다.

SE22017041920264570.png 

SE22017041920265170.png

 

- YearHired 변수를 생성하며해당 값으로는 EmployeeHireDate(고용일자)의 연도를 할당합니다.

SE22017041920284170.png 

SE22017041920290470.png

 

- Average 변수를 생성하며그 값으로 yr배열의 고용연도 번째의 자리값을 할당하게 됩니다이어 연소득(Salary)과 평균연소득(Average)의 차이를 나타내는 변수(SalaryDif)를 생성하고 있습니다.

SE22017041920275570.png

SE22017041920280370.png

 

 

▷ 컴파일 후프로그램 실행 과정을 살펴보겠습니다.

 

- 제일 먼저 data문이 실행하여, compare 데이터셋에 포함하지 않을 변수들을 표시해둡니다또한 관측번호를 나타내는 _N_값은 1이 입력됩니다.

SE22017041920302170.png 

SE22017041920303170.png 

SE22017041920305270.png

 

이 후 if 문이 실행됩니다현재 _N_=1이므로 Yr배열에 salarystats 데이터셋의 Statistic변수값이 ‘AvgSalary’인 행이 할당됩니다.

SE22017041920311170.png

 SE22017041920312670.png

 

이 후 employeepayroll 데이터셋에서 salary, EmployeeHireDate, Salary변수 관측값을 읽어옵니다.

SE22017041920314970.png 

SE22017041920315770.png

 

- YearHired 변수를 생성하며그 값으로 EmployeeHireDate(고용일자)의 연도를 할당합니다. 

SE22017041920322470.png

 SE22017041920323470.png

 

다음으로, Average변수가 생성되는데, Yr배열의 2007자리 값을 가져오게 됩니다.(아래 프로그램과 같이 실행될 것입니다.)

SE22017041920325170.png

 또한, SalaryDif변수를 생성하며 그 값으로, Salary값과 Average값의 차이를 할당합니다.

SE22017041920330370.png

 SE22017041920331270.png

- 이후 Run;이 실행되어 현재 값들을 output하게 되며이 과정을 employeeHireDate 데이터셋의 관측치를 모두 읽을 때까지 반복합니다.

 

 

 

- print 프로시저를 사용하여 상위 5개 관측치의 결과를 출력해보겠습니다. 

 

SE22017041920341970.png

 

결과를 보면각 직원에 대한 고용연도의 연소득(salary)과 그 해의 직원들의 평균 연소득(Average)의 차이(SalaryDif)를 보여주고 있습니다.

 

SE22017041920350070.png

 

 

 감사합니다.^^ 

 

 

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

sas-innovate-wordmark-2025-midnight.png

Register Today!

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.


Register now!

Article Labels
Article Tags