SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 58


The following SAS program is submitted: 

data work.total;

set work.salary(keep = department wagerate); 

by department;
if first.department
then payroll = 0;
payroll + wagerate;
if last.department;
run;


The SAS data set named WORKSALARY contains 10 observations for each department, and is currently ordered by DEPARTMENT.

Which statement is true?


A. The BY statement in the DATA step causes a syntax error. 

B. The statement payroll +wagerate; in the DATA step causes a syntax error.
C. The values of the variable PAYROLL represent the total for each department in the WORK.SALARY data set.
D. The values of the variable PAYROLL represent a total for all values of WAGERATE in the WORKSALARY data set.



WORKSALARY는 각 부사별로 10개의 observations이 있습니다. 그리고 이 데이타는 부서, department 정렬되어있고요. 


work.total이라는 데이터를 만들려고 합니다. keep을 사용해서 department, wagerate라는 변수를 가져오고 있습니다. 그리고 department로 by로 정렬해주고요. 이렇게 오름차순으로 되어있는데 다시 by department; 라고 선언을 하면  if first.department  & if last.department 가 생기게됩니다. 


간단하게 말해서 department의 변수 안에서 여러 부서가 계속 반복적으로 나오잖아요. 이때 첫번째로 나오는 부서와 마지막으로 나오는 부서를 표시해주는겁니다. 물론 이건 결과값으로 나오지 않습니다.


각 부서별로 payroll을 계산하기 위해서, 해당부서의 첫번쨰로 나오는 값부터 마지막까지 나오는 값까지 계산해야하니까 이걸 if first.department, if last.department를 사용해서 어느게 첫번째/마지막 오는지 지정해주는거예요.


if first.department
then payroll = 0;
payroll + wagerate;

이 내용을 살펴보면, 해당부서의 첫번째 observation이면 payroll이란 변수를 만들고 이 초기값을 0 으로 지정해줍니다. 그리고 payroll + wagerate 그러니까 그 해당부서의 첫번째 obervation부터 그 같은 해당부서의 마지막 observation인 wagerate이 누적되어서 payroll 변수에 들어가게 됩니다.


마지막줄, if last.department; 보면 이 말은 해당부서의 마지막 observation이냐?라는 말이고 그렇다면 얘를 결과값으로 즉 output으로 보여주라는 얘기니까 wagerate 값도 보여지게 되겠네요. 



답은 payroll은 각 work.salary데이터셋의 각 department 총 합을 가지게 됩니다. 



Answer: C 


반응형

+ Recent posts