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") > 0.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 NUMERO 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:;
run;
Muy sencillo y prá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.