Вы находитесь на странице: 1из 3

Trucos SAS.

Variables dummy de una variable continua


Abril 6th, 2009 | por rvaquerizo |

Dumificar es crear variables dummy. Un verbo completamente inventado pero que todos los que os habis enfrentado a la creacin de una tabla de entrada para realizar modelos estadsticos vais a entender perfectamente en que consiste. Dumificar es transformar una variable continua en N variables dicotmicas. Lo entenderemos mejor con un ejemplo grfico:

En el ejemplo partimos de 8 registros y creamos 4 variables dicotmicas en funcin de una variable importe. Hemos dumificado la variable importe en 4. Parece fcil de entender el concepto. Bien, pues esto es lo que planteo hacer con SAS. La metodologa que voy a emplear es la de siempre, parto de un dataset aleatorio con un identificador y un campo importe que pretendemos transformar en 5 variables (0,1). Para realizar este proceso necesitamos una macro que cuenta las observaciones de un dataset, ya la plante con anterioridad en otro artculo del blog. De todos modos os dejo completo el cdigo que empieza:
*MACRO PARA EL NUMERO DE OBSERVACIONES SIN RECORRER; %macro numobs(ds,mv); %global &mv.; data _null_; datossid=open("&ds."); no=attrn(datossid,'nobs'); call symput ("&mv.",compress(no)); datossid=close(datossid); run; %mend;*DATASET ALEATORIO QUE HAY QUE AGRUPAR EN FUNCION DE LA VARIABLE IMPORTE; data uno; do i=1 to 334560; importe=ranuni(0)*1000; if rand("uniform")<.04 then resp=1; else resp=0; if resp=0 and 200<IMPORTE</IMPORTE if resp=0 and 800<IMPORTE</IMPORTE output; end;

run;Vemos

la macro que obtiene el nmero de observaciones y generamos un dataset aleatorio con 334.560 observaciones que tiene un campo importe aleatorio y un campo resp menos aleatorio. Al ejecutar la macro %numobs(uno,obs) tenemos la macrovariable obs y adems especificamos que el nmero de variables de agrupacin que deseamos para dumificar el campo importe ser de 5. Ahora necesitaremos ordenar y categorizar las variable importe, la tcnica que vamos a utilizar ya la vimos en otro artculo:
*ORDENAMOS POR LA VARIABLE QUE DESEAMOS CATEGORIZAR; proc sort data=uno; by importe; run; %numobs(uno,obs);%let numero_de_grupos=5;

*CREAMOS 5 GRUPOS INICIALES EN FUNCION DE LA VARIABLE A TRAMIFICAR; data uno; set uno; *CREAMOS N GRUPOS; rango=ceil((_n_/&obs.)*&numero_de_grupos.); run;

Disponemos de la variable importe y una variable que tramifica este importe en 5 grupos. Ahora hemos de transformarlo en variables (0,1) para ello vamos a crear una sentencia GR_1=0; IF RANGO= 1 THEN GR_1=1,, GR_5=0; IF RANGO= 5 THEN GR_5=1. Esto se puede hacerse manualmente o bien podemos hacer una macro variable que la contenga. Lo hacemos con un proceso que pueda ser automtico y podemos hacer tantos grupos como deseemos. Esta metodologa puede resultaros interesante
*VARIABLES DICOTOMICAS EN FUNCION DEL NUMERO DE GRUPOS INICIALES; data instruccion; do i=1 to &numero_de_grupos.; instruccion="GR_"||compress(put(i,3.))||"=0; IF RANGO="||put(i,3.)||" THEN GR_"||compress(put(i,3.))||"=1"; output; end; run; proc sql noprint ; select instruccion into:instr separated by ";" from instruccion; quit; proc delete data=instruccion;data uno; set uno; &instr.; run;

Muy til, hemos construido un cdigo reiterativo con el PROC SQL, adems nos servir para cada ocasin en la que nos enfrentemos a cdigos parecidos. Ahora nuestro dataset uno aleatorio tiene unas variables grupo llamadas GR_ que agrupan una variable cuantitativa, ahora lo interesante es agrupar esa variable cuantitativa en funcin de una variable respuesta; pero eso ser en prximas entregas. Estoy diseando un bucle que realice una agrupacin en funcin de una respuesta y este proceso que hoy os muestro ser

el primer paso.Por supuesto, si tenis dudas o un trabajo bien remunerado


rvaquerizo@analisisydecision.es

Etiquetas: Dummy, variables de entrada

Вам также может понравиться