SASPROGRAMMING HANDOUT #22 This MACRO program considers a categorical variable (DISCRETE) and creates dummy variables. This can then be used together with other MACROs OPTIONS MACROGEN MPRINT SYMBOLGEN; %MACRO DUMMY (DATA1=,DATA0=,DISCRETE=); %*************************************************************** Macro Parameters: DATA1 - output data set DATA0 - input data set DISCRETE - discrete variable CAT - variable on output data set (1 to n) CATi - (0/1) variable i=1 to n ****************************************************************; DATA ONE; SET &DATA0; ONE=1; %* assign integer values to each level; PROC SORT; BY &DISCRETE; PROC MEANS NOPRINT; BY &DISCRETE; VAR ONE; OUTPUT OUT=AA0 SUM=SUM; DATA BB0; SET AA0; CAT=_N_; DATA BB1; MERGE ONE BB0; BY &DISCRETE; %* find out how many levels the discrete variable has; PROC MEANS MAX NOPRINT DATA=BB0; VAR CAT; OUTPUT OUT=AA1 MAX=MAX; DATA AA1; SET AA1; CALL SYMPUT('MMM',MAX); %* create the dummy variables; DATA &DATA1; IF _N_=1 THEN SET AA1; SET BB1; %DO G=1 %TO &MMM; CAT&G=(CAT=%EVAL(&G)); %END; DROP _TYPE_ _FREQ_ MAX ONE SUM; %MEND; DATA BOB; INPUT A $ @@; CARDS; -1 -1 A B B C C C D D D D E E E E E 8 8 8 8 8 8 8 8 %DUMMY(DATA1=JIM,DATA0=BOB,DISCRETE=A); PROC PRINT DATA=JIM; RUN;