Sounds like you are using datetime values (number of seconds) and not date values (number of days).
Are your variables numeric with datetime values? Or character strings that look to humans like they mean datetime values.
To use INTNX() function to move a datetime value to the end of day you need to use the DTDAY interval (instead of the DAY interval which is for date values). SAS will set the time part to '23:59:59't, so one second before midnight. To get a difference in datetime values in hours you just subtract them to get the number of seconds and then divide by one hour to convert to the number of hours.
data want;
set have (rename=(start_date=start_dt stop_date=stop_dt));
if missing(stop_dt) then stop_dt = intnx('dtday',stop_dt,0,'e');
hours = (stop_dt - start_dt) / '01:00't ;
run;
PS I would avoid calling a datetime value a DATE. That will cause confusion.