You show some values with one decimal point displayed. What is the FORMAT currently assigned to the values? By default the displayed values are actually rounded by the format and so an actual value of 254.41 and 254.400338 would both display as 254.4.
See if this yields more of what you expect. The round function will round the values to the tenths decimal before the comparisons.
data check1;
set example;
where round(hours1, 0.1)^= round(hours3,0.1) or round(hours2,0.1) ^= round(hours3,0.1);
keep id hours1 hours2 hours3 ;
run;
... View more