/*Dummy coder 1.1*/ /*www.estat.us*/ /*create a series of numeric dummy variables based on character variables*/ /*data name and the name of a character variable*/ %let dataname=sashelp.class; %let charavar=age sex name; /*working directory*/ %let WD=C:\TEMP; /********************************************/ /********************************************/ /********************************************/ data are;set &dataname; keep &charavar; run; proc contents data =are; ods output variables=are2; run; data are3; set are2; syntax1='%fuji (charavar='; syntax2=");"; coding=syntax1||variable||syntax2; run; data _null_;set are3; file "&WD\dummy coding macro.txt"; put (coding) (100.0); run; %macro fuji (charavar=); proc freq data=&dataname; tables &charavar; ods output onewayfreqs=&charavar; run; data &charavar.2; length code $ 200; set &charavar; xif = "if &charavar ="; xthen= "then"; xname="&charavar"; xnewvar=compress(xname||&charavar); xequal="="; xone="1"; xquote="'"; xsemicolon=";"; xspace=" "; xspace2=" "; xelse="else"; xzero="0"; xFreq="Freq"; xPer="%"; percent=round(percent,3); xasterisk1="/*"; xasterisk2="*/"; code=xif||xquote||&charavar||xquote||xspace||xthen||xspace||xnewvar||xequal||xone|| xsemicolon||xspace||xelse||xspace||xnewvar||xequal||xzero||xsemicolon; desc=xasterisk1||xFreq||Frequency||xspace||percent||xper||xasterisk2; keep code ; run; proc append base=main data=&charavar.2 force; run; %mend fuji; %include "&WD\dummy coding macro.txt"; data _null_;set main; file "&WD\dummy coding syntax.txt"; put (code) (200.0); run; proc datasets library=work; delete main; run; /*This would save a frequency table*/ option NOCENTER; PROC PRINTTO PRINT="&WD\freq report.txt" new; RUN; options formdlim=' ' nodate; proc freq data=&dataname; tables &charavar; run; PROC PRINTTO PRINT=PRINT; run; quit; x "notepad &WD\dummy coding syntax.txt"; x "notepad &WD\freq report.txt";