我想知道用戶是否在他們輸入程序的最早日期的30天內收到了優惠券。每個用戶都可能會進入許多程序,並且我正在嘗試標記某個程序的最早日期。這將是一些示例數據:查找特定事件發生的最早日期
USERID START_DATE PROGRAMID COUPON_DATE
1 2003-02-05 83435 2003-03-01
1 2004-05-04 83435 2005-03-05
1 2002-01-30 82222 2001-02-24
2 2001-02-02 82222 2001-04-22
2 2000-04-03 22222 2004-12-13
2 1999-02-05 83435 1999-05-02
2 2005-05-28 83435 2008-02-02
3 1998-01-01 24853 1999-02-02
3 2006-03-02 44533 2006-05-02
我期望的輸出會是這個樣子(尋找是否有人收到內進入程序83435 30天的優惠券):
USERID START_DATE PROGRAMID COUPON_DATE MATCH
1 2003-02-05 83435 2003-03-01 1
1 2004-05-04 83435 2005-03-05 0
1 2002-01-30 82222 2001-02-24 0
2 2001-02-02 82222 2001-04-22 0
2 2000-04-03 22222 2004-12-13 0
2 1999-02-05 83435 1999-05-02 0
2 2005-05-28 83435 2008-02-02 0
3 1998-01-01 24853 1999-02-02 0
3 2006-03-02 44533 2006-05-02 0
我的代碼迄今是:有人只
proc sql;
create table programmatch as
select users.*,
case when (min((start_date) +30) >= coupon_date) then 1
else 0 end as match
from users
ORDER BY USERID;
quit;
此代碼標記是否接受30天之內的優惠券,但我不確定如何使它標記特定programid爲好。
有沒有辦法在proc sql中做到這一點?
對不起,如果這是混亂。
感謝,
我不清楚你究竟在問什麼。你能舉一個更具體的例子來說明programID的含義嗎?現在給userID = 1有相同的程序,但前兩行的開始日期不同,這對我來說不是很明顯。 – Joe 2014-12-01 22:59:44
您是否需要爲每個「PROGRAMID」單獨列顯示他們是否在30天內獲得了優惠券? – mjsqu 2014-12-02 00:34:15