나루다루

[SAS BASE] Q58. first & last & if 본문

Study/SAS BASE

[SAS BASE] Q58. first & last & if

나루다루 2018. 5. 28. 12:38
728x90
반응형

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.

 

 

Answer: C





# 예시




# 구문 설명

 - first.변수 : 변수 내의 여러 범주의 관측값들 중에서 범주의 각 첫번째 관측값에 1을 할당하고, 나머지 변수에는 0을 할당

 - last.변수 : 변수 내의 여러 범주의 관측값들 중에서 범주의 각 마지막 관측값에 1을 할당하고, 나머지 변수에는 0을 할당

  - first/last : 정렬이 돼야 사용가능. data step 내에서만 존재.(pdv상에서만 존재) -> 출력 x


 - if 변수 <=> if 변수=1 : 변수=1 조건을 만족하는 레코드를 선택

 - if 변수 then - : 변수=1 조건을 만족하면 then -을 실행.


 - payroll + wagerate : payroll과 wagerate를 더한 후, payroll 변수에 할당함.


# 문제 풀이

 - 첫번째 if문에서 first.department = 1이면 payroll에 0을 할당한다. 따라서 첫번째 관측치의 payroll에는 0이 할당된다.

 - payroll+wagerate문에서 0+100이 되므로 첫번째 payroll에는 100이 할당된다. 

 - 마지막 if문에서 last.department = 1을 만족하는 레코드를 출력한다. 하지만 첫번째 관측치는 last.depatment가 0이므로 출력하지 않는다.

 - 다시 첫번째 if문으로 돌아가서 두번째 관측치에 대해서 반복 수행한다.

 - 두번째 관측치의 payroll에는 100+200인 300이 할당되고, 출력은 되지 않는다.

 - 세번째 관측치의 payroll에는 300+300인 600이 할당되고, last.department가 1이므로 출력된다. 

 - 네번째 관측치는 first.department가 1이므로 payroll에 0을 할당한다. (리셋하는거)

 - 다시 위의 사항들을 반복한다.



# 코딩 결과



728x90
반응형

'Study > SAS BASE' 카테고리의 다른 글

SAS BASE Q26. proc sort [수정]  (0) 2018.10.30
[SAS BASE] informat 정리  (0) 2018.05.30
[SAS BASE] Q57. ?  (0) 2018.05.23
[SAS BASE] Q56. le  (0) 2018.05.23
[SAS BASE] Q55. weekdate.  (0) 2018.05.23
Comments