You can use RETAIN. By this you can shift information one row lower and then make comparisons, set counters and calculate time distances and sum then up. Below i have coded an example. I have not much experience in using RETAIN, so it might be coded more efficient. data a; minute = 1; transcode = 'A'; revenue = 11.64; output; minute = 4; transcode = 'A'; revenue = 8.34; output; minute = 7; transcode = 'A'; revenue = 6.09; output; minute = 10; transcode = 'B'; revenue = 5.38; output; minute = 15; transcode = 'C'; revenue = 4.34; output; data a; set a; if _n_= 1 then do; tmp1= minute; tmp2= transcode; tmp3 = revenue; end; retain tmp1 tmp2 tmp3; prae_minute= tmp1; prae_transcode= tmp2; prae_revenue_chain = tmp3; if prae_transcode = transcode and _n_ > 1 then revenue_chain= prae_revenue_chain + revenue; else revenue_chain = revenue; tmp1= minute; tmp2= transcode; tmp3 = revenue_chain; keep minute transcode revenue revenue_chain; proc print data = a; run;
... View more