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;

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐