The following SAS program is submitted:
data work.empsalary;
set work.people (in = inemp)
work.money(in = insal);
if insal and inemp;
run;
The SAS data set WORK.PEOPLE has 5 observations, and the data set WORK.MONEY has 7 observations. How many observations will the data set WORK.EMPSALARY contain?
A. 0
B. 5
C. 7
D. 12
정답은 A 입니다.
set 결합은 총 3가지 방식이 있습니다.
one-to-one reading, concatenating, interleaving
첫 번째, one-to-one reading은 각 데이터 셋의 상대적 위치를 기준으로하여 결합하는 방법입니다.
set dataset1 dataset2;
두 번째, concatenating은 데이터 셋을 세로로 결합하는 방법입니다.
set dataset1; set dataset2;
세 번째, interleaving 방식은 KEY 변수를 기준으로 데이터를 결합하는 방식입니다.
set dataset1 datset2 by key-variable
위 문제는 one-to-one reading 방식입니다.
상대적 위치를 기준으로 결합하는 방식이어서 행이 존재할 것 같지만 답은 A. 0개 입니다.
왜냐하면, if insal and inemp; 구문이 존재하기 때문입니다.
이 구문을 해석하기 위해선 먼저, work.money(in = insal); 구문을 먼저 해석해야 합니다.
이건 work.money 데이터셋에 해당하는 행만 insal이라는 변수에 1이라는 값을 할당하겠다는 의미입니다.
마찬가지로 work.people (in = inemp); 의 경우 work.people에 해당하는 행만 inemp 변수에 1이라는 값을 할당하는 것입니다.
if insal and inemp; 구문은 insal 변수값과 inemp 변수값 모두 1에 해당하는 행만을 추출하는 것입니다.
따라서, 모두 1에 해당하는 값이 없기 때문에 출력되는 관측값은 0입니다.