【问题标题】:How to join two columns from one table to a different table based matching criteria in SAS如何将一个表中的两列连接到 SAS 中基于匹配条件的不同表
【发布时间】:2020-04-07 00:05:33
【问题描述】:

我正在尝试将“更新”表中的“Type2”和“Measurement2”列连接到“Have”表。我希望列对齐表“Have”中的列“Subject1”与表“update”中的列“Subject2”匹配,并且表“Have”中的列“Procedure1”与表“Update”中的列“Procedure2”匹配。谢谢提前。

data Have;
    input Subject1 Type1 :$12. Date1 &:anydtdte. Procedure1 :$12. Measurement1;
    format date yymmdd10.;
    datalines;

500   Initial    15 AUG 2017      Invasive    20 
500   Initial    15 AUG 2017     Surface      35   
428   Initial     3 JUL 2017     Outer        10 
765   Initial     20 JUL 2019     Other       19  
610   Initial     17 Mar 2018     Invasive    17 
;

data Update;
    input Subject2 Type2 :$12. Date2 &:anydtdte. Procedure2 :$12. Measurement2;
    format date yymmdd10.;
    datalines;

500   Followup   15 AUG 2018     Invasive     54 
428   Followup    15 AUG 2018      Outer      29 
765   Seventh     3 AUG 2018      Other       13 
500   Followup    3 JUL 2018      Surface     98 
610   Third       20 AUG 2019     Invasive    66  
;

【问题讨论】:

  • “分组依据”是什么意思?当您要使用聚合函数时,通常只使用 GROUP BY 子句。您要计算什么总量?

标签: sql join sas left-join proc-sql


【解决方案1】:

您只是在寻找两个表之间的连接吗??

Select distinct have.*, update.type2, update.measurement2 
from have
left join update
on
have.subject1 = update.subject2
and have.procedure1 = update.procedure2

【讨论】:

    【解决方案2】:

    根据BY 语句中命名的 变量,使用MERGE 执行基于键(您的主题和过程)的两个数据集的组合。两个数据集都需要相同的 BY 变量。

    示例代码:

    • MERGE 需要排序的数据,因此必须首先进行。
    • 数据集选项rename= 用于为BY 语句创建通用名称。
    proc sort data=Have;    by Subject1 Procedure1;
    proc sort data=Updates; by Subject2 Procedure2;
    
    data combined;
      * trick: force these variables to be first two columns in output data set;
      retain subject procedure;
    
      merge
        have    (rename=(subject1=subject procedure1=procedure))
        updates (rename=(subject2=subject procedure2=procedure))
      ;
      by subject procedure;
    run;
    

    示例数据:

    data Have;
    attrib
      Subject1 length=8
      Type1 length=$12
      Date1 informat=anydtdte. format=yymmdd10.
      Procedure1 length=$12
      Measurement1 length=8
    ;
    input 
    Subject1& Type1&   Date1&       Procedure1& Measurement1&; datalines;
    500       Initial  15 AUG 2017  Invasive    20 
    500       Initial  15 AUG 2017  Surface     35   
    428       Initial   3 JUL 2017  Outer       10 
    765       Initial  20 JUL 2019  Other       19  
    610       Initial  17 Mar 2018  Invasive    17 
    ;
    
    data Updates;
    attrib
      Subject2 length=8
      Type2 length=$12
      Date2 informat=anydtdte. format=yymmdd10.
      Procedure2 length=$12
      Measurement2 length=8
    ;
    input 
    Subject2& Type2&    Date2&       Procedure2& Measurement2&; datalines;
    500       Followup  15 AUG 2018  Invasive    54 
    428       Followup  15 AUG 2018  Outer       29 
    765       Seventh    3 AUG 2018  Other       13 
    500       Followup   3 JUL 2018  Surface     98 
    610       Third     20 AUG 2019  Invasive    66  
    ;
    

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2016-08-05
      • 2011-09-24
      • 1970-01-01
      相关资源
      最近更新 更多