我有以下数据集(items
),可以在下一个工作日支付任何日期和金额的交易。
对于rate
为>5
我的任务是比较rate > 5
与下一个工作日支付的金额相符的实例数量(这将具有标准code 121
)
例如,在rate > 5
$ 40(4 * 10)4/14/2017' - The amount
4/17/2017`
is paid on
的四个实例
Date id rate code batch
4/14/2017 1 12 100 A1
4/14/2017 1 2 101 A1
4/14/2017 1 13 101 A1
4/14/2017 1 10 100 A1
4/14/2017 1 10 100 A1
4/17/2017 1 40 121
4/20/2017 2 12 100 A1
4/20/2017 2 2 101 A1
4/20/2017 2 3 101 A1
4/20/2017 2 10 100 A1
4/20/2017 2 10 100 A1
4/21/2017 2 30 121
My code
proc sql;
create table items2 as select
count(id) as id_count,
(case when code='121' then rate/10 else 0 end) as rate_count
from items
group by date,id;
quit;
这没有产生预期的结果,我在这里遇到的挑战是检查交易日期(4/14/2017
和4/20/2017
)和下一个工作日日期4/17/2017
,{{1 }})。
感谢您的帮助。
答案 0 :(得分:0)
LAG功能可以解决这个问题。因为我们可以使用滞后值来创建我们想要的条件,而不必使用> 5条件。
以下是解决方案: -
Data items;
set items;
Lag_dt=LAG(Date);
Lag_id=LAG(id);
Lag_rate=LAG(rate);
if ((id=lag_id) and (code=121) and (Date>lag_dt)) then rate_count=(rate/lag_rate);
else rate_count=0;
Drop lag_dt lag_id lag_rate;
run;
希望这有帮助。