SAS-数据步-合并-Merge语句
SAS-数据步-合并-Merge语句MERGE语句用merge语句将两个或多个SAS数据集中的观测值横向匹配合并成一个新的数据集的一个观测值。DATA<新数据集名称>;MERGE<已有数据集列表>;BY <变量1> [<变量2>…];RUN;说明:1、匹配合并指来自不同数据集中具有至少一个共同变量(匹配变量),按照匹配变量取相...
·
MERGE语句
用merge语句将两个或多个SAS数据集中的观测值横向匹配合并成一个新的数据集的一个观测值。
DATA <新数据集名称>;
MERGE <已有数据集列表>;
BY <变量1> [<变量2>…];
RUN;
说明:
1、匹配合并指来自不同数据集中具有至少一个共同变量(匹配变量),按照匹配变量取相同数值的观测值横向合并;
2、用by语句指定匹配的变量,合并前需针对by的数据集的变量排序;
3、每一个待合并数据集需先按匹配变量排序。
示例
代码
data ma;
input id name$ sex$ age;
cards;
1001 Tom F 25
1003 Lisa M 20
1005 Anna M 26
1002 Lyli M 21
;
proc sort;
by id;
run;
data mb;
input id Language$ score;
cards;
1001 Chinese 85
1001 English 76
1002 Chinese 89
1004 English 90
proc sort;
by id;
run;
data mc;
merge ma mb;
by id;
run;
Title “MERGE合并结果”;
proc print data=mc;
run;
Merge in
data 新建一个数据集;
merge a(in=C) b(in=D);①
by id;②
if C=1 and D=1;③
proc print;
run;
说明:
①将数据集a和b进行横向合并,括号后面in=C的意思:如果读取的数据是属于a数据集里面的,则C=1 否则 C=0,D右边in同理。看合并后的数据中哪些是a数据集里面的,哪些是b数据集里面的。
②需要注意的是,新产生的变量C和D是属于临时变量,自己定义的,可以调用但是在输出结果中是不显示的,不过你想在输出结果中显示,还需要将C和D赋值给新变量,比如在①后面一步,E=C。
代码
data mc1;
merge ma(in=a) mb(in=b);
by id;
if a; /*读取的数据是属于a数据集的*/
run;
Title “属于ma”;
proc print data=mc1;
run;
data mc2;
merge ma(in=a) mb(in=b);
by id;
if b; /*读取的数据是属于b数据集的*/
run;
Title “属于mb”;
proc print data=mc2;
run;
data mc3;
merge ma(in=a) mb(in=b);
by id;
if a and b; /*读取的数据是属于a和b数据集的,数据集取交*/
run;
Title “属于ma交mb”;
proc print data=mc3;
run;
data mc4;
merge ma(in=a) mb(in=b);
by id;
if not a and b; /*读取的数据是不属于a,但属于b数据集的*/
run;
Title “不属于ma,属于mb”;
proc print data=mc4;
run;
data mc5;
merge ma(in=a) mb(in=b);
by id;
if a and not b; /*读取的数据是属于a,但不属于b数据集的*/
run;
Title “属于ma,不属于mb”;
proc print data=mc5;
run;
更多推荐
所有评论(0)