楼主: zhengbo8
16845 12

[问答] MERGE横向一对多合并时,是一在前还是多在前? [推广有奖]

11
slimdell 发表于 2012-12-19 14:08:44
zhengbo8 发表于 2012-12-19 09:42
对不起,可能我描述得不好,问题是这样:
数据集a
Num   VarA
感觉上应该是和你merge 的语句有关的
如果你merge a b那自然是a在前,b在后
如果你merge b a那就是b在前,a在后
知乎专栏/微信公号同名:煮酒烹茶读书

12
yongyitian 发表于 2012-12-20 01:07:17
一般来说,第二个数据集是用于更新(或者说覆盖)数据集1中的相同的观测,和合并dataset2的新变量到 dataset1。
以下示例显示了4种不同情况下的merge,1对1,1对多,多 对1,和多对多条观察合并。在数据集中s表示一,m为多.

Look carefully the data1 and data2 and result tables; you could get a better understanding of the merge.

data data1;
input a b b1 c1 $;
datalines;
1 101 101 s
2 201 201 s
3 401 401 m
3 501 501 m
4 401 401 m
4 501 501 m
5 511 511 m2
5 521 521 m2
6 601 601 m3
6 611 611 m3
6 621 621 m3
; run;

data data2;
input a b b2 c2 $;
datalines;
1 10002 10002 s
2 80002 80002 m
2 70002 70002 m
3 30002 30002 s
4 40002 40002 m
4 50002 50002 m
5 53002 53002 m3
5 53102 53102 m3
5 53202 53202 m3
6 64002 64002 m2
6 64102 64102 m2
; run;

data data1_data2;
    merge data1 data2;
        by a;
run;
data data2_data1;
    merge data2 data1;
        by a;
run;

data1-data2        
                          Obs    a      b       b1    c1      b2     c2
                            1    1    10002    101    s     10002    s
                            2    2    80002    201    s     80002    m
                            3    2    70002    201    s     70002    m
                            4    3    30002    401    m     30002    s
                            5    3      501    501    m     30002    s
                            6    4    40002    401    m     40002    m
                            7    4    50002    501    m     50002    m
                            8    5    53002    511    m2    53002    m3
                            9    5    53102    521    m2    53102    m3
                           10    5    53202    521    m2    53202    m3
                           11    6    64002    601    m3    64002    m2
                           12    6    64102    611    m3    64102    m2
                           13    6      621    621    m3    64102    m2

  data2-data1        
                          Obs    a      b        b2     c2     b1    c1
                            1    1      101    10002    s     101    s
                            2    2      201    80002    m     201    s
                            3    2    70002    70002    m     201    s
                            4    3      401    30002    s     401    m
                            5    3      501    30002    s     501    m
                            6    4      401    40002    m     401    m
                            7    4      501    50002    m     501    m
                            8    5      511    53002    m3    511    m2
                            9    5      521    53102    m3    521    m2
                           10    5    53202    53202    m3    521    m2
                           11    6      601    64002    m2    601    m3
                           12    6      611    64102    m2    611    m3
                           13    6      621    64102    m2    621    m3

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

13
zhengbo8 发表于 2012-12-20 08:49:02
yongyitian 发表于 2012-12-20 01:07
一般来说,第二个数据集是用于更新(或者说覆盖)数据集1中的相同的观测,和合并dataset2的新变量到 dataset ...
感谢坛子里热心的大家!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 19:12