En alguna ocasión ya he conjugado el verbo dumificar y, preparando una segmentación, he creado una macro SAS que genera variables dummy a partir de variables categóricas.
Es decir, si la variable A toma valores 1, 2 y 3, tendría que generar A_1 con valor 1 si A toma 1 y con valor 0 en caso contrario; A_2 tiene valor 1 si A es igual a 2, y A_3 tiene valor 1 si A es igual a 3. No es complicado de comprender: pasamos de una variable con tres niveles a tres variables con valores 0 o 1. Para ésto podemos emplear array o la siguiente macro:
%macro dumificar(varib, grupos, mv);
%global &mv.;
data instruccion;
do i = 1 to &grupos.;
instruccion = "&varib._" || compress(put(i, 3.)) ||
" = 0; if &varib. = " || put(i, 3.) ||
" then &varib._" || compress(put(i, 3.)) || " = 1";
output;
end;
run;
proc sql noprint;
select instruccion into :&mv. separated by "; "
from instruccion;
quit;
proc delete data=instruccion;
run;
%mend;
La intención es crear de forma automática un código del tipo VARIABLE_1 = 0; if VARIABLE = 1 then VARIABLE_1 = 1;. La macro tiene tres parámetros: varib (la variable que deseamos dumificar), grupos (el número de grupos de la variable que vamos a transformar en dummies) y mv (el nombre de la macrovariable que contendrá el código SAS generado de forma automática). A modo de ejemplo de uso:
data aleatorios;
do i = 1 to 1000;
datoA = min(ranpoi(2, 4), 9);
if datoA <= 3 then datoB = ranpoi(89, 2);
else if datoA <= 5 then datoB = min(ranpoi(89, 6), 6);
else datoB = min(ranpoi(89, 2), 3);
output;
end;
drop i;
run;
%dumificar(datoA, 9, dumifica_datoA);
%dumificar(datoB, 8, dumifica_datoB);
data aleatorios_final;
set aleatorios;
&dumifica_datoA.;
&dumifica_datoB.;
run;
Espero que os sea de utilidad esta macro. Saludos.