Given the SAS data set WORK.ONE:
Id | Char1 |
111 | A |
158 | B |
329 | C |
644 | D |
and the SAS data set WORK.TWO:
Id | Char2 |
111 | E |
538 | F |
644 | G |
The following program is submitted:
data WORK.BOTH;
set WORK.ONE WORK.TWO;
by Id;
run;
What is the first observation in SAS data set WORK.BOTH?
A.
Id | Char1 | Char2 |
111 | A |
B.
Id | Char1 | Char2 |
111 | E |
C.
Id | Char1 | Char2 |
111 | A | E |
D.
Id | Char1 | Char2 |
644 | D | G |
Answer: A
注解:SET statement的作用是将多个data set合并,但不会对观测值进行合并。题目中,新data set BOTH中将包含ONE和TWO中所有的变量,BY statement作用是使新data set根据ID升序排列,所以ONE中的第一条数据将成为BOTH中的第一条数据,由于该观测值中没有Char2变量,所以输出结果中显示为missing。完整的BOTH为:
Obs | Id | Char1 | Char2 |
1 | 111 | A | |
2 | 111 | E | |
3 | 158 | B | |
4 | 329 | C | |
5 | 538 | F | |
6 | 644 | D | |
7 | 644 | G |
如需对观测值合并,应当使用MERGE,具体请参考SAS Base (28)。
ANSWER C.
A is correct, its interleaving the dataset: sort by ID after concatenating.
The answer is A.
Try running this code (from the data in the problem above):
Data One;
Input Id Char1 $;
Datalines;
111 A
158 B
329 C
644 D
;
Run;
Data Two;
Input Id Char2 $;
Datalines;
111 E
538 F
644 G
;
Run;
Data Both;
Set One Two;
By ID;
Run;
proc print data=both;
run;
The answer is A. Run the code below in SAS to see for yourself.
Data One;
Input Id Char1 $;
Datalines;
111 A
158 B
329 C
644 D
;
Run;
Data Two;
Input Id Char2 $;
Datalines;
111 E
538 F
644 G
;
Run;
data both;
set One Two;
by ID;
run;
proc print data = both;
run;