比较SAS

时间:2017-05-04 23:51:30

标签: date sas compare proc

我有以下数据集(items),可以在下一个工作日支付任何日期和金额的交易。

对于rate>5

的ID,下一个工作日为每个ID支付的金额为10美元

我的任务是比较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/20174/20/2017)和下一个工作日日期4/17/2017,{{1 }})。

感谢您的帮助。

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;

希望这有帮助。