There are a number of ways to do it, but from another perspective, there is only one.
Obviously you have to read in both datasets, and replace the incorrect values with the corrected values.
Simply, in form:
Data original;
merge original correct_values;
by var1 var2 ... ;
run;
quit;
The order of original and correct_values is critical.
So, the first thing to do is make a practice set of datasets, and experiment with them until you are absolutely certain you are getting what you want/expect.
The second thing to do, is to be sure that only the variables that have invalid data are in the correct_values dataset to be sure you don't accidentally change variables in original that are correct.
The only other way is to change the variable names in the correct_values dataset set so that you can read in both, not collide by accident, and then explicily/manually set the correct values in the original. From this place, you can do an inplace using _infile_ and _file_ buffers, or some other method.