【问题标题】:Merge two data files in SAS and create variables在SAS中合并两个数据文件并创建变量
【发布时间】:2018-09-23 01:32:08
【问题描述】:

我有两个数据集要加入并从第一个表中提取详细信息作为两个变量

这是我的两个数据集

 data1

  ID          Code      last4_Code
 101        102345678      5678
 101        234142345      2345
 101        189765412      5412

第二个数据集是每个 id 一行,带有两个代码 (code1 and code2)

data2

  ID          code1      code2 
 101          5678       5412

我需要我的最终数据集,其中包含来自第一个数据集的“代码”作为两个不同的变量

 ID          Code1_a       Code2_a
101         102345678     189765412

我尝试proc sql左连接来获取多行,然后创建两个新变量

   proc sql;
    create table new as select
     a.id,b.code from
     data2 a
     left join data1 b
     on a.id=b.id
     or a.code1=b.last4_code
   quit;

但这并没有按预期工作。

我将不胜感激!

【问题讨论】:

  • 您在别名a 中寻找一个名为code1 的变量,即data1,但在您的示例数据集中,您只有一个名为code 的变量。同样,您在别名b 中寻找last4_code,即data2,但该变量位于data1,而不是data2

标签: variables merge sas left-join


【解决方案1】:

类似的东西。你需要为 code1 和 code2 的两个条件加入并把它们绑回来

data have1;

input ID          Code      last4_Code;
datalines;
101        102345678      5678
101        234142345      2345
101        189765412      5412
 ;

data have2;

input ID          Code1      code2;
datalines;
101          5678       5412
 ;


 proc sql;
 select coalesce(x.id,y.id) as id, code1_a format=best32., code2_a format   
=best32. from 
 ( select a.id, code as code1_a from
 have1 a
inner join
have2 b
on b.code1 = a.last4_code)x
full join 
(select a.id, code as code2_a from
have1 a
inner join
have2 b
on b.code2 = a.last4_code)y
on x.id =y.id;

如果你有多个 last4_Code 值,那么上面的代码也可以工作,而不是在前面的示例中 have1 有一条记录 last4_Code。用下表也试试上面的代码。

/*this has an additional line of data*/
 101        102545669      5678*/

 data have1;

  input ID          Code      last4_Code;
  datalines;
   101        102345678      5678
  101        234142345      2345
  101        189765412      5412
  101        102545669      5678
 ;

【讨论】:

  • 我可以将 have2 作为我的基础,因为它没有重复的 ID。上面的代码正在生成多行,其中还包括来自 have2 的第二条记录,其中 has1 中没有最后 4 个匹配项
  • 如果您有重复的空值,您想查看的内容。确定
  • 如果 have1 中为 null,则为空白,因为没有匹配项。我很少在 have1 中看到 have2 id 的重复项 - 即使它们存在,我只需要具有来自 have1 的重复代码的行
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多