繁体   English   中英

如何将具有不同值的字段转移到另一个表(如带条件的左连接)

[英]How to transfer a field with different values to another table (like a left join with condition)

我告诉你我想做什么。 我必须表: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”数据集中丢失。 它也不在您的 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;

最好的事物,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM