直接上案例:
data a ;
input ID age ;
datalines;
1 30
2 35
3 46
4 24
;
run;
data b ;
input ID sex$ ;
datalines;
2 F
3 M
4 M
5 F
;
RUN;
*合并前进行排序,养成好习惯;
proc sort data=a ;
by id ;
proc sort data=b ;
by id ;
run;
在没有使用in=的情况下,sas在遇到要合并的数据集索引变量存在不相同时(即本次案例中合并的数据集a,b中的ID不完全相同)默认全部纳入,合并后的值为缺失。见图一
data c;
merge a b;
by id;
run;
使用in=的情况:
程序代码:
data C1 C2 C3; /*建立三个数据集*/
merge a(in=ages) b(in=heights);/* 这里的in=var语句中,var是指临时变量,该变量标识 是否来自该数据集 ,如果是,则返回1 ,否则返回0;*/
by ID;
if ages=1 and heights=1 then output C1;/* 将两个数据集都包含的ID所对应的观测合并到数据集C1*/ ;
else if ages=0 and heights=1 then output C2;/* 将数据集A不包含但数据集B包含的ID对应的观测合并到数据集C2*/ ;
else if ages=1 and heights=0 then output C3; /* 将数据集B不包含但数据集A包含的ID对应的观测合并到数据集C2*/ ;
RUN ;
C1数据集
C2数据集
C3数据集
From:http://www.beta-stat.com/?p=451