例1:
Given the SAS data sets:
WORK.FIRST WORK.SECOND
Common | X | Common | Y |
---|---|---|---|
A | 10 | A | 1 |
A | 13 | A | 3 |
A | 14 | B | 4 |
B | 9 | B | 2 |
The following SAS program is submitted:
'data WORK.COMBINE;
set WORK.FIRST;
set WORK.SECOND;
run;'
what data values are stored in data set WORK.COMBINE?
答案:
Common | X | Y |
---|---|---|
A | 10 | 1 |
A | 13 | 3 |
B | 14 | 4 |
B | 9 | 2 |
The following SAS program is submitted:
'data WORK.COMBINE;
set WORK.FIRST
WORK.SECOND;
run;'
what data values are stored in data set WORK.COMBINE?
答案:
Common | X | Y |
---|---|---|
A | 10 | . |
A | 13 | . |
A | 14 | . |
B | 9 | . |
A | . | 1 |
A | . | 3 |
B | . | 4 |
B | . | 2 |
例2:
Given the SAS data sets:
WORK.ONE WORK.TWO
X | Y | SumY |
---|---|---|
A | 10 | 36 |
A | 3 | |
A | 14 | |
B | 9 |
The following SAS program is submitted:
'data WORK.COMBINE;
if _n_=1 then set WORK.TWO;
set WORK.ONE;
run;'
what data values are stored in data set WORK.COMBINE?
答案:
SumY | X | Y |
---|---|---|
36 | A | 10 |
36 | A | 3 |
36 | A | 14 |
36 | B | 9 |
对于例1中的两种情况,关键是理解第一种情况下两个set,共用一个PDV,就是两个指针读取数据,写到同一个PDV里面去。而第二种情况是一个set,一个PDV,只有一个指针读取数据,先读完FIRST数据集里面的数据,再去读SECOND数据集的数据。
例2是一个较为经典的用法,其主要作用是当单条记录数据集和多条记录数据集没有公共变量可以MERGE的时候,将这两个数据集拼接在一起的一种方法,尤其是需要在已知数据集的后面拼上总和这一列数据的时候。而这种写法之所以有效,是因为set语句读取数据的时候,默认保留上一条记录的值ÿ