【问题标题】:How to transfer a field with different values to another table (like a left join with condition)如何将具有不同值的字段传输到另一个表(如带条件的左连接)
【发布时间】:2021-02-06 20:46:00
【问题描述】:

我告诉你我想做什么。我必须要表:have1 和 have2,我想要表“想要”。 如果 have2 的日期介于 start_date 和 end_date 之间,我想复制此字段。

data have1;
informat Start_Date End_Date ddmmyy10.;
format Start_Date End_Date ddmmyy10.;
input id  Start_Date  End_Date;
datalines;
10 08/02/2020 07/03/2020
10 02/10/2020 18/10/2020
;;;;
run;
data have2;
infile datalines delimiter=',';
informat Date ddmmyy10.;
format Date  ddmmyy10.;
input id  Date  ;
datalines;
10,01/01/20
10,01/04/20
10,05/05/20
10,05/10/20
;;;;
run;
data want;
infile datalines delimiter=',';
informat Date Start_Date End_Date ddmmyy10.;
format Date Start_Date End_Date ddmmyy10.;
input id  Date  Start_Date  End_Date;
datalines;
10,01/01/20,.,.
10,15/02/20,08/02/2020,07/03/2020
10,01/04/20,.,.
10,05/05/20,.,.
10,05/10/20,02/10/2020,18/10/2020
;;;;
run;

【问题讨论】:

  • 在您想要的数据集中,您有一个 15/02/20 日期,这在您的两个主要数据集中不存在。但我认为它应该在 have2 中。

标签: sql join sas left-join union


【解决方案1】:

“want”数据集中的日期 15/02/20 已从“have2”数据集中丢失。它也不在你的 have1 数据集中。

您首先需要将它包含在您的一个原始数据集中,以便它可以出现在您的最终数据集中。将它包含在您的 have2 数据集中更有意义,该数据集由单个日期点组成:

data have2;
infile datalines delimiter=',';
informat Date ddmmyy10.;
format Date  ddmmyy10.;
input id  Date  ;
datalines;
10,01/01/20
10,01/04/20
10,15/02/20
10,05/05/20
10,05/10/20
;;;;
run;

在原始数据集中包含缺失的日期后,我之前在此处发布的代码将得到您想要的:

proc sql;
create table want as
select distinct
t1.date,
case when t1.Date>t2.Start_Date and t1.date<t2.End_Date 
     then t2.Start_Date else . end as Start_Date format=DDMMYY10.,
case when t1.Date>t2.Start_Date and t1.date<t2.End_Date 
     then t2.End_Date else . end as End_Date format=DDMMYY10.,
t1.id  
from have2 t1
left join have1 t2 on t1.id=t2.id
group by id, date
having end_date=max(end_date);
quit;

最好的,

【讨论】:

  • 感谢您的回答,但您想要的不是我想要的,缺少一行
  • 您好,不客气。结果它“丢失”了一行,因为日期 15/02/20 不在任何原始数据集中。
  • @user14208300 如果您在 have2 数据集中包含“缺失”日期,它将不再丢失。我已经为你做了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多