Compute the difference between two time variables, even when the latter is past midnight


The sample code below illustrates one way to compute the difference between two time variables, even when the latter is past  midnight.

data duration; 
input jobid $ start time8. finish time8. miscvar $; 
if finish lt start then duration=('24:00:00't-start)+finish; 
else duration=finish-start; 
datalines; 
J115 05:54:3308:23:33 ABCDUL 
J116 06:12:3410:12:22 ABCCBA 
J117 11:54:2211:33:22 ABCPAL 
J118 12:23:2214:24:34 ABCJAM 
J119 13:24:5413:55:22 ABCRAB 
J120 14:32:2214:54:12 ABCPAL 
J121 22:44:4106:55:22 ABCEBS 
;
run;

proc print; 
format start time8. finish time8. duration time8.;
run;

 

The results of PROC PRINT are below:

Obs    jobid       start          finish       miscvar      duration
   1     J115      5:54:33      8:23:33    ABCDUL      2:29:00
   2     J116      6:12:34    10:12:22    ABCCBA      3:59:48
   3     J117     11:54:22    11:33:22   ABCPAL     23:39:00
   4     J118     12:23:22    14:24:34   ABCJAM      2:01:12
   5     J119     13:24:54    13:55:22   ABCRAB      0:30:28
   6     J120     14:32:22    14:54:12   ABCPAL      0:21:50
   7     J121     22:44:41      6:55:22   ABCEBS      8:10:41