Probably because it is taking the scenic route?
The first two steps can be reduced to one (or none if you just use WHERE= dataset option in third step).
data typfmt_update;
set pg2.np_types_regions(where=(upcase(fmtname)='TYPCODE'))
pg2.np_newcodes
;
keep fmtname type start label;
fmtname='TYPCODE';
type='C';
run;
Basically you are adding the observations from PG2.NP_NEWCODE to the set of values used to define $TYPCODE format. So that the next step can use PROC FORMAT to actually create the format. Which is used by the final step to change how the values or TYPE are displayed (and hence how they are grouped by PROC FREQ).