proc format; invalue sexn 'F'=1 'M'=2 'N'=3 other=4; value sexo 1='Female' 2='Male' 3='Not reported' 4='Missing'; run; data _adsl; set adam.adsl; sexn=input(sex, sexn.); keep usubjid sex sexn; run; proc freq data=_adsl noprint; table sexn*sex / out=fqsex; run; %macro fill_format(din=, var=, fillfmt=); proc format cntlout=_fillfmt0; select &fillfmt; run; data _fillfmt1; set _fillfmt0; &var=input(strip(start), best.); run; proc sort data=&din; by &var; run; proc sort data=_fillfmt1; by &var; run; data &din._o; merge _fillfmt1(in=a keep=&var label) &din(in=b); by &var; if a or b; run; %mend fill_format; %fill_format(din=fqsex, var=sexn, fillfmt=sexo);