2017-05-04 67 views
0

我有以下數據集(items),其中包含任何日期的交易以及下一個工作日支付的金額。比較SAS中兩個不同日期的列中實例的數量

支付每個ID上的下一個營業日的量是其rate>5

我的任務是比較實例的數量,其中rate > 5均符合下一個營業日支付金額的ID $ 10 (這將有一個標準code 121

例如,有上4/14/2017' - The amount $ 40(4 * 10)與rate > 5四個實例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/20174/20/2017)和下一工作日日期(4/17/20174/21/2017)。

感謝您的幫助。

回答

0

滯後函數將在這裏做的伎倆。因爲我們可以使用滯後值來創建我們想要的條件,而不必使用速率> 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; 

希望這有助於。