SAS合并仅匹配第一条记录

时间:2016-05-15 22:49:29

标签: sas

假设我有一张表A:

   sq_id  val
    1       10
    1       10
    2       11
    3       12

和表B:

sq_id  tor_id
1       999
2       456
3       200

假设我合并了这些表:

 proc sort data = A; by sq_id; run;
 proc sort data = B; by sq_id; run;

data mergetable;
  merge A(in=a) B(in=b);
  by sq_id;
  if a =1;
run;

我得到的输出是:

   sq_id  val   tor_id
        1   10  999
        1   10
        2   11
        3   12

所有其他行都没有tor_id的任何值。这有什么理由吗?我检查过这些值没有空格或空格。

1 个答案:

答案 0 :(得分:2)

正如其他人在评论中指出的那样,你给出的例子并没有给出有问题的结果。但我猜你指的是多对多类型的合并,在这种情况下,问题(对于大多数实际情况),数据步骤{ {1}}。

实施例

merge

我们看到来自A的第一次观察,其中'sq_id = 1与来自B的第一次相应观察相匹配,而来自A的第二次观测与来自B的第二次观测相匹配。

这很少(如果有的话)我们想要发生的事情。作为一般规则,只要匹配变量上存在重复值,data a; input sq_id val; datalines; 1 10 1 11 2 12 3 13 ; data b; input sq_id tor_id; datalines; 1 999 1 . 2 456 3 200 ; data mergetable; merge a (in=a) b (in=b); by sq_id; if a = 1; run; * Results; sq_id val tor_id 1 10 999 1 11 . 2 12 456 3 13 200 就是首选,因为它始终会生成所有可能的组合。

使用proc sql

进行多对多连接
proc sql

在这种情况下,来自A的proc sql; create table mergetable2 as select a.*, b.tor_id from a full join b on a.sq_id = b.sq_id; quit; * Results; sq_id val tor_id 1 10 999 1 10 . 1 11 999 1 11 . 2 12 456 3 13 200 的所有观察结果都与来自B的所有观察结果相匹配。{/ 1}}。

相关问题