我有以下数据集(items
(,并在下一个工作日支付的任何日期和金额。
下一个工作日支付的每个ID的金额为10美元的ID,其rate
为>5
我的任务是比较rate > 5
与下一个工作日支付的金额一致的实例数(这将具有标准的code 121
(
例如,4/14/2017' - The amount
上有四个实例,rate > 5
$ 40(4*10(is paid on
4/17/2017`
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
,4/21/2017
(。
感谢您的帮助。
滞后函数将在这里解决问题。因为我们可以使用滞后值来创建所需的条件,而不必使用速率> 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;
希望这会有所帮助。