Thanks again. For anyone that's interested, this is what I ended up doing. There are no errors in the log for invalid arguments and it actually runs a little faster than the function straight up. Below is the code I used as a base and then my code.
http://www.sascommunity.org/wiki/Fixed_Zipstate_function
* Zipcode to State using ZIPSTATE() = zipstate;
data fmts(drop=i);
length start $ 5 end $ 5 fmtname $ 8 label $ 2 type $ 1;
retain fmtname "zipstate" hlo " " type "C";
do i=0 to 99999;
start=PUT(i,z5.);
end=start;
label=zipstate(start);
if label > '' then output;
end;
start=' '; hlo = 'O'; label=' '; output;
run;
proc format library = VAULT cntlin=fmts; run;
proc datasets library=work nolist; delete fmts; quit;