[SAS 고급] 1차원 배열: 예시 (One-Dimensional Arrays: Example)
안녕하세요^^
이번 시간에는 lookup 테이블에 1차원 배열을 사용하는 예시를 살펴보도록 하겠습니다.
▶ 비즈니스 시나리오는 다음과 같습니다.
▷ '각 직원의 연도별 연소득'과 '해당 연도의 전체 직원 평균 연소득'의 차이를 산출하는 작업을 해보겠습니다.
▷사용할 자료는 orion 라이브러리의 (1) salarystats 데이터셋과 (2) employeepayroll 데이터셋입니다.
(1) salarystats 데이터셋
1978년 부터 2011년 까지, 해 마다의 전체 직원의 평균연소득(AvgSalary) 값을 포함하고 있습니다.
(이 자료가 array를 생성하여 가져올 자료입니다.)
(2) employeepayroll 데이터셋
직원(EmployeeID) 별 연소득과 고용일자가 포함되어 있습니다.
▶ Table Lookup를 사용하여 데이터를 결합해보겠습니다.
▷ 1차원 배열(salarystats 데이터셋)을 생성하여 결과를 산출할 코드는 다음과 같습니다.
▷ 이 코드에서 핵심 프로그램은 아래 두 가지입니다. (이후 구체적인 절차를 살펴보도록 하겠습니다.)
array 문을 사용하여, 1978부터 2011까지 자리에(즉, 34(=2011-1977)개의 자리에)
Yr1978, Yr1979, ... , Yr2011이라는 변수명을 차례로 갖는 yr 배열을 생성할 것입니다.
yr배열의 YearHired값(고용된 연도) 자리의 값을 Average 변수값으로 할당할 것입니다.
여기서 YearHired값은 year함수를 사용해 추출한 고용연도값입니다.
▷ 그럼, 먼저 프로그램의 컴파일 과정을 살펴보겠습니다.
- 먼저 format문이 컴파일되어 Salary, Average, SalaryDif 변수에 대한 공간을 생성합니다.
- 다음으로 array 문장이 컴파일됩니다. 총 34개 자리를 갖는 1차원 배열 공간이 생성된 것을 확인할 수 있습니다.
- 이어 if문이 컴파일되어, 첫번째 관측치일 경우에 salarystats 데이터셋의 Statistic 변수값이 ‘AvgSalary’인 관측치들만 가져오도록 코딩하였습니다.
따라서 이 때 사용된 변수인 Statistic 변수의 공간을 생성된 것을 알 수 있습니다.
- 다음은 set 문이 컴파일되어, employee payroll 데이터셋에서 세 변수를 가져오게 됩니다.
- YearHired 변수를 생성하며, 해당 값으로는 EmployeeHireDate(고용일자)의 연도를 할당합니다.
- Average 변수를 생성하며, 그 값으로 yr배열의 고용연도 번째의 자리값을 할당하게 됩니다. 이어 연소득(Salary)과 평균연소득(Average)의 차이를 나타내는 변수(SalaryDif)를 생성하고 있습니다.
▷ 컴파일 후, 프로그램 실행 과정을 살펴보겠습니다.
- 제일 먼저 data문이 실행하여, compare 데이터셋에 포함하지 않을 변수들을 표시해둡니다. 또한 관측번호를 나타내는 _N_값은 1이 입력됩니다.
- 이 후 if 문이 실행됩니다. 현재 _N_=1이므로 Yr배열에 salarystats 데이터셋의 Statistic변수값이 ‘AvgSalary’인 행이 할당됩니다.
- 이 후 employeepayroll 데이터셋에서 salary, EmployeeHireDate, Salary변수 관측값을 읽어옵니다.
- YearHired 변수를 생성하며, 그 값으로 EmployeeHireDate(고용일자)의 연도를 할당합니다.
- 다음으로, Average변수가 생성되는데, Yr배열의 2007자리 값을 가져오게 됩니다.(아래 프로그램과 같이 실행될 것입니다.)
또한, SalaryDif변수를 생성하며 그 값으로, Salary값과 Average값의 차이를 할당합니다.
- 이후 Run;이 실행되어 현재 값들을 output하게 되며, 이 과정을 employeeHireDate 데이터셋의 관측치를 모두 읽을 때까지 반복합니다.
- print 프로시저를 사용하여 상위 5개 관측치의 결과를 출력해보겠습니다.
- 결과를 보면, 각 직원에 대한 고용연도의 연소득(salary)과 그 해의 직원들의 평균 연소득(Average)의 차이(SalaryDif)를 보여주고 있습니다.
감사합니다.^^
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.