I don't see any instruction telling SAS to read your date variables as if they are dates in the mmddyy10 format in the source file.
INFORMAT is used to specify that. You FORMAT BDATE but READ HDATE. One of these things is not like the other.
The generic approach to reading into each multiple sets is the DATA statement must list the names of all of the sets wanted.
Then a separate explicit output statement addressing the desired data set is used:
data set1
set2
;
<other code>
if variable = value then output set1;
else output set2;
run;
if you need /want more than one data set list it. To send records to a specific set though you still need an output statement and the simple if/then/else likely won't quite work as desired for 3 or more sets.
You can keep the variables wanted with a KEEP statement, Remove the ones you don't want with a DROP statement.
I believe we may have mentioned that posting the log, or if many repeated warning or errors, some of the log in a code box.