Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS合并只匹配第一条记录_Sas - Fatal编程技术网

SAS合并只匹配第一条记录

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(

假设我有一张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