转载博客:http://crackman.net/
data crackman1(index=(x));
input x y z@;
datalines;
1 2 3
4 5 6
7 8 9
10 11 12
12 13 14
;
run;
data crackman2;
input x m n@;
datalines;
1 3 5
7 8 5
12 6 4
;
run;
data crackman3;
set crackman2;
set crackman1 key=x;
sum_all=sum(x,y,z,m,n);
run;
proc print;
run;
如果把
data crackman3;
set crackman2;
set crackman1 key=x;
sum_all=sum(x,y,z,m,n);
run;
proc print;
run;
改成
data crackman3;
set crackman1 key=x;
set crackman2;
sum_all=sum(x,y,z,m,n);
run;
proc print;
run;
会是什么结果呢?
解释如下:
如果现实SET CRACKMAN2,那么在编译时候先建立PDV,并且读入CRACKMAN2的一条观测进入PDV,等于说PDV里面的值不是默认为缺失值,接下来在读入crackman1里面的一条观测时,因为有KEY,所以先到KEY这个变量进行一个比较才决定要不要读入KEY变量之后的其余变量值,如果一开始是crackman1的一条观测,KEY只有跟PDV里面的默认缺失值比较了,肯定是不能出现结果的,所以该了之后的Y Z为缺失。这也是KEY的作用所在。