SAS和Coalesce函数插入缺少的日期值?

问题描述 投票:0回答:1

我有一个患者就诊日期(PROC1_DT)的数据集(VISIT1),其日期为90天之前(LOOKBACK_DT)。我已将此VISIT1与另一个表VISIT2联接在一起,这样,如果PROC2_DT落入在PROC1_DT和LOOKBACK_DT之间,将创建新列表。

但是,即使没有PROC2_DT介于PROC1_DT和LOOKBACK_DT之间,我也希望将VISIT1中的所有日期都显示在最终数据集中。例如,医生B和患者5不会出现在当前最终数据集中,因为患者没有PROC2_DT介于PROC1_DT和LOOKBACK_DT之间。

我曾尝试使用COALESE,但是显然我没有正确使用它和/或需要其他方法。

VISIT1
Doctor Patient LOOKBACK_DT PROC1_DT
A      1       28APR2018   27JUL2018
A      2       07MAR2018   05JUN2018
A      3       19JUN2018   17SEP2018
A      4       22MAY2018   20AUG2018
B      5       07FEB2019   08MAY2019
C      6       14JUL2018   12OCT2018
C      7       10APR2018   09JUL2018
C      8       17NOV2018   15FEB2019

proc sql;
  create table final_data_set as
  select distinct 
      a.Doctor 
    , a.Patient 
    , a.LOOKBACK_DT
    , coalesce(b.viisit_dt) as PROC2_DT format=date9.
    , a.PROC1_DT
  from
    VISIT1 a
  left join
    ( select *
      from prvdr_bene_visit
      where _proc2 ge 1
    ) b 
  on a.Patient=b.Patient
  where
    b.VISIT_DT ge a.lookback_dt
    and b.VISIT_DT lt a.PROC1_DT
  group by  
      a.Doctor
    , a.Patient
    , a.PROC1_DT
    , a.lookback_dt
  order by
    a.Doctor
    , a.Patient
    , a.PROC1_DT
  ;
quit;

FINAL_DATA_SET 
Doctor Patient LOOKBACK_DT PROC2_DT   PROC1_DT
A      1       28APR2018   24JUL2018  27JUL2018
A      2       07MAR2018   03JUN2018  05JUN2018
A      3       19JUN2018   07SEP2018  17SEP2018
A      4       22MAY2018   18AUG2018  20AUG2018
C      6       14JUL2018   09OCT2018  12OCT2018
C      7       10APR2018   03JUL2018  09JUL2018
C      8       17NOV2018   28DEC2018  15FEB2019
date sas coalesce
1个回答
0
投票
  • 确实使它成为左联接:

如果我正确理解任务,那么您的问题是您认为正在使用LEFT JOIN,但实际上是在进行内部联接。这是因为您添加了WHERE条件,该条件使用“左连接表”中的列,这种方式要求记录匹配-实际上是内部连接。

要使其成为左联接,您需要使WHERE中提供的条件成为JOIN条件的一部分-这就像将WHERE更改为AND一样容易:

on a.Patient=b.Patient
/* where */ and
b.VISIT_DT ge a.lookback_dt
and b.VISIT_DT lt a.PROC1_DT
  • 关于用于PROC2_DT日期的coalesce-我不确定您在那里的计划是什么。 Coalesce是基于行的操作,它从several参数返回第一个非空值,例如coalesce(b.VISIT_DT, a.PROC_DT) as some_date

这不是一个聚合函数,没有其他聚合函数,因此不需要GROUP BY子句。

© www.soinside.com 2019 - 2024. All rights reserved.