Truco SAS. Categorizar variables continuas

Junio 5th, 2008 | por rvaquerizo |

Si necesitamos crear grupos a partir de una variable continua podemos emplear una metodología muy sencilla para crear muestras proporcionales o muestras de un tamaño predeterminado a partir de un conjunto de datos SAS. El método de cálculo es bien sencillo. Si deseamos crear N grupos dividimos la observación entre el total y multiplicamos por los N grupos redondeando al entero más alto. Si deseamos grupos de tamaño M dividimos la observación entre M redondeando al entero más alto. En código SAS:

*DATASET ALEATORIO;
data uno;
	do i=1 to 2000;
	importe=ranuni(0)*1000;
	if rand("uniform")>.34 then output;
	end;
run;
 
*MACRO PARA IDENTIFICAR EL NUMERO DE OBSERVACIONES DE UN DS;
%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;
 
%numobs(uno,obs_de_uno);
 
*ESPECIFICAMOS EL NÚMERO Y EL TAMAÑO DE LOS GRUPOS;
%let numero_de_grupos=4;
%let tamanio_de_grupos=100;
 
*ORDENAMOS POR LA VARIABLE QUE DESEAMOS CATEGORIZAR;
proc sort data=uno; by importe; run;
 
*EN UN MISMO DATA CREAMOS LOS GRUPOS;
data uno;
	set uno;
 
	*CREAMOS N GRUPOS;
	rango1=ceil((_n_/&obs_de_uno.)*&numero_de_grupos.);
 
	*CREAMOS GRUPOS DE TAMAÑO M;
	rango2=ceil(_n_/&tamanio_de_grupos.);
run;
 
proc freq data=uno; tables rango:; quit;
 

Muy sencillo y más páctico. En el futuro crearé un proceso que divida las variables continuas en función de una variable dependiente.

Para dudas o sugerencias rvaquerizo@analisisydecision.es

  1. 2 Respuestas en “Truco SAS. Categorizar variables continuas”

  2. Por ailatan, Jun 6, 2008 | Responder

    También funciona, por ejemplo, para hacer 8 grupos en base a la variable var:

    PROC RANK DATA=libreria.tabla_entrada
    GROUPS=8
    OUT=libreria.tabla_salida;
    VAR var;
    RANKS GR_var;
    RUN;

    ¿No?

  3. Por rvaquerizo, Jun 6, 2008 | Responder

    Con el proc rank necesitas 2 dataset para hacer lo mismo. No sé como será el tiempo de ejecución. Con la metodología que planteo voy a realizar un algoritmo que clasifica en función de una variable dicotómica. A ver si me sale.

Publica un Comentario