SAS合并只匹配第一条记录
假设我有一张a表:SAS合并只匹配第一条记录,sas,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(
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的任何值。有什么原因吗?我检查了这些值是否没有空格。正如其他人在评论中所指出的,您给出的示例没有给出有问题的结果。但我猜您指的是一种多对多类型的合并,在这种情况下,数据步骤
合并存在问题(对于大多数实际情况)
例子
我们看到A的第一个观测值(sq_id=1)与B的第一个对应观测值相匹配,A的第二个观测值与B的第二个观测值相匹配
这很少(如果有的话)是我们希望发生的事情。作为一般规则,只要匹配变量上存在重复值,proc sql
是首选,因为它将始终生成所有可能的组合
使用proc-sql的多对多联接
在这种情况下,A具有sq_id=1
的所有观察值都与B具有sd_id=1
的所有观察值相匹配。您的预期输出是否为每个记录填充了tor_id/而不是缺失了tor_id?应该为每个记录填充tor_id。这不是测试样本的情况,因此,您需要提供一个显示缺陷的示例。您的问题无法复制。请参阅此处有关合并一对多文件的SAS说明以及输出内容:
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;
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