Date 比较SAS中两个不同日期的列中的实例数
我有以下数据集(Date 比较SAS中两个不同日期的列中的实例数,date,sas,compare,proc,Date,Sas,Compare,Proc,我有以下数据集(项目),其中包含任何日期的交易以及下一个工作日支付的金额 对于费率为>5的id,下一个工作日为每个id支付的金额为10美元 我的任务是比较rate>5与下一个工作日支付的金额一致的实例数量(这将有一个标准code 121) 例如,2017年4月14日,有四个案例的费率>5——金额$40(4*10)在2017年4月17日支付` Date id rate code batch 4/14/2017 1 12 100 A1 4/14/2017 1
项目
),其中包含任何日期的交易以及下一个工作日支付的金额
对于费率为>5的id,下一个工作日为每个id支付的金额为10美元
我的任务是比较rate>5
与下一个工作日支付的金额一致的实例数量(这将有一个标准code 121
)
例如,2017年4月14日,有四个案例的费率>5
——金额$40(4*10)在2017年4月17日支付`
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
我的代码
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;
这并没有产生预期的结果,我面临的挑战是检查交易日期(2017年4月14日
和2017年4月20日
)和下一个营业日日期(2017年4月17日
,2017年4月21日
)
感谢您的帮助。这里的延迟功能会起作用。因为我们可以使用滞后值来创建我们想要的条件,而不必使用rate>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;
希望这有帮助