楼主: Crystal莹zyy
3895 5

[问答] 请问merge中的多对一怎么理解,急急急在线等 [推广有奖]

  • 3关注
  • 2粉丝

已卖:821份资源

副教授

30%

还不是VIP/贵宾

-

威望
0
论坛币
19148 个
通用积分
10.0820
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
1883 点
帖子
267
精华
0
在线时间
632 小时
注册时间
2013-8-11
最后登录
2026-1-17

楼主
Crystal莹zyy 发表于 2018-6-16 21:35:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神,第一种merge,a表放前面我理解,若有相同的变量后者的值会进行覆盖;
但是第二种merge,c表放前面,结果数据集的第三行,为什么BB没有B覆盖呢,如何理解?

QQ截图20180616213201.png
二维码

扫码加我 拉你入群

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

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

关键词:结果数据 数据集 结果数

沙发
楠枫...狐狸 发表于 2018-6-19 19:34:52
merge过程讲究一一对应。你所说的第二种情况,是用数据集C去merge 数据集B。我们看到数据集C中X=2的记录有两条。所以会依次与数据集B中的记录去合并。
首先第一条x=2的记录与数据集B中的X=2去合并,因为x=2时数据集C的Y值为空,因此最终的Y的值为“B”;
接着,数据集C中的第2条x=2的记录继续与数据集B中的x=2记录合并,此时数据集C中Y=“BB”,因此覆盖数据集B中的Y=“B”。
不知道有没有说清楚,欢迎讨论。

藤椅
Crystal莹zyy 发表于 2018-6-20 08:37:17
楠枫...狐狸 发表于 2018-6-19 19:34
merge过程讲究一一对应。你所说的第二种情况,是用数据集C去merge 数据集B。我们看到数据集C中X=2的记录有两 ...
首先感谢回复,但是Merge合并的时候,应该是后面数据集的变量值覆盖前面的数据集啊,我不是很懂为啥CC表的BB没有被B覆盖?

板凳
priss111 发表于 2018-6-20 11:23:53
通常merge合并时是同一行观测相同变量名的后一个数据集中的观测值替换前一个数据集中的值。
但前提是:后一个数据集中得有观测值,
若后一个数据集中的同行中没有相应观测则前一个数据集中同行同变量观测值不变。

c中第3行是2 BB,
a中第3行没有x=2的观测值只有x=3的观测值,
所以不能被a中的观测值覆盖,
结果第3行照写c中的BB.

报纸
priss111 发表于 2018-6-20 16:27:54
http://documentation.sas.com/?docsetId=lrcon&docsetTarget=n1tgk0uanvisvon1r26lc036k0w7.htm&docsetVersion=9.4&locale=en#p1dou269qdd63qn1pwvy421uk3vl

***Match-Merging;
Example 2: Match-Merge with Duplicate Values of the BY Variable
...
...
Note: The MERGE statement does not produce a Cartesian product on a many-to-many match-merge. Instead, it performs a one-to-one merge while there are observations in the BY group in at least one data set. When all observations in the BY group have been read from one data set and there are still more observations in another data set, SAS performs a one-to-many merge until all observations have been read for the BY group.

地板
楠枫...狐狸 发表于 2018-6-30 21:58:32 来自手机
Crystal莹zyy 发表于 2018-6-20 08:37
首先感谢回复,但是Merge合并的时候,应该是后面数据集的变量值覆盖前面的数据集啊,我不是很懂为啥CC表的 ...
抱歉,这段时间比较忙一直没上论坛。你想问BB为什么没有被B覆盖,我之前的解释没有说清楚。在merge过程中,并不是会随意覆盖原有值,如果原有值缺失的话必然覆盖,但未缺失的情况不是的。这里数据集C中x=2的第一条记录y值为空,所以与数据集A合并后保留的值是A中的值(B)。当数据集C中x=2的第二条记录y=BB与数据集A合并时,由于产生的数据集中已有x=2的记录,因此会新产生一条x=2的记录,而不会覆盖已有的值。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 16:15