BookmarkSubscribeRSS Feed

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

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

[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

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags