根据优先级选择日期范围

时间:2017-09-27 16:15:38

标签: sql sas

我的逻辑面临着一些死路一条。想在论坛上发帖寻求帮助。

我有以下数据集。

data have1;
input case action_in_date action_out_date priority;
cards;
100 28-MAY-2015 29SEP2015 02
100 04-SEP-2015 27NOV2015 03
100 27-NOV-2015 17SEP2016 04
;
run;

data have2;
input case post_date amount;
cards;
100 18-SEP-2015 250
100 19-SEP-2015 100
100 30-NOV-2015 300
;
run;

现在,has2数据集中前两行(18-SEP-2015和19-SEP-2015)的发布日期的发布日期介于has1数据集中的两个日期范围之间。我。 2015年5月28日至2015年5月29日和2015年9月4日以及2015年11月27日之间。但我希望将资金分配给最高优先级。即在04-SEP-2015和27NOV2015之间,优先级为03.我正在寻找的输出低于

/ 输出; / 100 04-SEP-2015 27NOV2015 03 350 100 27-NOV-2015 17SEP2016 04 300 ;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这可以解决您的问题吗? (不确定我完全理解这个问题)

proc sql;
create table allocation as
select b.case, a.action_in_date, a.action_out_date, a.priority, b.post_date, b.amount
from have1 a RIGHT JOIN have2 b
on a.case=b.case and a.action_in_date<=b.post_date<=a.action_out_date
group by b.case, b.post_date
having a.priority=max(a.priority);
quit;

以下是分配数据集的视图:

install and run multiple versions

顺便说一下,我建议用这个代码来创建have1和have2:

data have1;
informat action_in_date date9. action_out_date date9.;
format action_in_date date9. action_out_date date9.;
input case action_in_date action_out_date priority;
cards;
100 28MAY2015 29SEP2015 02
100 04SEP2015 27NOV2015 03
100 27NOV2015 17SEP2016 04
;
run;

data have2;
informat post_date date9.;
format post_date date9.;
input case post_date amount;
cards;
100 18SEP2015 250
100 19SEP2015 100
100 30NOV2015 300
;
run;