楼主: zhou.wen
82279 29

[学习分享] SAS学习笔记之数据合并Merge [推广有奖]

教授

9%

还不是VIP/贵宾

-

TA的文库  其他...

SAS Technology

威望
0
论坛币
31987 个
通用积分
6.2141
学术水平
283 点
热心指数
262 点
信用等级
257 点
经验
55167 点
帖子
399
精华
4
在线时间
1328 小时
注册时间
2010-10-12
最后登录
2018-3-9

初级学术勋章 初级热心勋章 中级学术勋章 中级热心勋章

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
SAS学习笔记目录
上一篇:创建Data文件
Combining Data:合并数据
关于SAS的数据合并,一种是纵向合并,相当于SQL里面的UNION,另外一种的横向的合并类似SQL里面的JOIN,也就是匹配
纵向合并:用set
  1. DATA SAS-data-set ;
  2. SET SAS-data-set1 SAS-data-set2 . . .;
  3. <other SAS statements>
  4. RUN;
复制代码
  1. data newhires;
  2. set na1 na2;
  3. run;
复制代码
例子很简单,稍微试一下就知道了,其中na1,na2和newhires都是数据集的名字。纵向合并就是用set语句就可以了
横向合并:用Merge
  1. DATA SAS-data-set;
  2. MERGE SAS-data-sets;
  3. BY BY-variable(s);
  4. <other SAS statements>
  5. run;
复制代码
By 后面就是需要匹配的字段,例子如下
  1. data ia.compare;
  2. merge ia.performance ia.goals;
  3. by Month;
  4. Difference=Sales-Goal;
  5. run;
复制代码
merge.jpg
如图,Month是需要匹配的字段,Difference则匹配后Sales-Goal产生的新字段。

注意,Merge实现的是全连接,那么如果想要实现左连接或者是右连接应该怎么办,可以考虑用in语句
IN的用法用下面这个例子可以看出来
in.jpg
  1. data work.combine;
  2. merge ia.gercrew(in=InCrew)
  3. work.gersched(in=InSched);
  4. by EmpID;
  5. run;
复制代码
代码如上,那么如果要实现左连接则可以在run语句前面加上

  1. if InSched=1;
复制代码

下一篇:sas学习笔记之if和where

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Merge SAS学习 学习笔记 数据合并 习笔记 学习 sas merge

已有 3 人评分经验 学术水平 热心指数 信用等级 收起 理由
eijuhz + 40 精彩帖子
李会超 + 100 精彩帖子
zll_zh + 1 + 1 + 1 精彩帖子

总评分: 经验 + 140  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

本帖被以下文库推荐

Practice Is The Best Teacher!
沙发
ziyenano 发表于 2012-8-20 17:40:08 |只看作者 |坛友微信交流群
辛苦楼主了,不过总觉得SAS横向合并,不管是merge还是update都不大好用,比不上sql

使用道具

藤椅
zhou.wen 发表于 2012-8-20 17:49:34 |只看作者 |坛友微信交流群
ziyenano 发表于 2012-8-20 17:40
辛苦楼主了,不过总觉得SAS横向合并,不管是merge还是update都不大好用,比不上sql
Merge语句完全可以PRO SQL来代替,但是我认为这是SAS为了为部分有SQL基础的程序员可以轻松学习SAS
但是我猜想MERGE语句效率应该要比SQL过程高,毕竟存在必有其合理性
愚见不知道对不对
Practice Is The Best Teacher!

使用道具

板凳
ziyenano 发表于 2012-8-20 18:00:00 |只看作者 |坛友微信交流群
zhou.wen 发表于 2012-8-20 17:49
Merge语句完全可以PRO SQL来代替,但是我认为这是SAS为了为部分有SQL基础的程序员可以轻松学习SAS
但是我 ...
不太清楚效率哎,感觉SAS9之后,proc sql效率提高了不少;不过应该还是比不上data,proc步吧;
用merge的限制太多,不过合适用的话,还是用merge,每次敲 select...也疼。

使用道具

报纸
zhou.wen 发表于 2012-8-20 18:07:31 |只看作者 |坛友微信交流群
ziyenano 发表于 2012-8-20 18:00
不太清楚效率哎,感觉SAS9之后,proc sql效率提高了不少;不过应该还是比不上data,proc步吧;
用merge的 ...
灵活应用吧,64位的SAS9.3在计算效率上比sas9.1.3有了很大的提高,之前算一天的程序,现在可以在1个小时之内完成了。
不知道是不是64位后可以充分利用内存的原因
Practice Is The Best Teacher!

使用道具

地板
zkymath 在职认证  发表于 2012-11-16 00:40:36 |只看作者 |坛友微信交流群
merge的多对多合并,大家试一试

使用道具

7
Testuo 发表于 2012-11-17 00:01:28 |只看作者 |坛友微信交流群
SAS版本或其他原因,数据匹配过程中Merge函数不能乱用凡是需要double  check
如:Merge A(in=a) B;if a;by ID; 的时候如果 ID在A数据集中不唯一的话会导致更新匹配有遗漏的现象,仅参考,希望初学者跑Sas的时候谨慎使用

使用道具

8
Testuo 发表于 2012-11-17 00:04:23 |只看作者 |坛友微信交流群
Testuo 发表于 2012-11-17 00:01
SAS版本或其他原因,数据匹配过程中Merge函数不能乱用凡是需要double  check
如:Merge A(in=a) B;if a;by ...
个人认为 data步 比proc sql 效率

使用道具

9
龙潭丰乐 学生认证  发表于 2012-12-31 11:45:12 |只看作者 |坛友微信交流群
zkymath 发表于 2012-11-16 00:40
merge的多对多合并,大家试一试
merge多对多的合并与sql不同,但是不太理解为什么?merge到底如何运作的?

使用道具

10
eric_darcy 发表于 2014-2-15 13:23:04 |只看作者 |坛友微信交流群
谢谢楼主分享

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 02:25