如何解决如何将具有不同值的字段传输到另一个表如带条件的左连接
我告诉你我想做什么。我必须有表:have1和have2,我想有表“想”。 如果have2的日期在开始日期和结束日期之间,我想复制此字段。
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,05/05/20,05/10/20,02/10/2020,18/10/2020
;;;;
run;
解决方法
“想要的”数据集中的日期15/02/20丢失了。它也不在您的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;
最好
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。