Archivo de la etiqueta: outliers

Macros (fáciles) de SAS. Eliminar outliers en una variable

Hace tiempo ya os propuse una chapuza para eliminar outliers de forma multivariante. Por supuesto quedaba eliminar outliers en una variable. Recortar los valores extremos en aquellas variables cuantitativas que deseemos. Para ello os propongo una macro que no considero muy compleja y que os analizaré con mayor detalle, pero lo primero la macro al completo:

%macro elimina_outliers(
varib, /*VARIABLE PARA ELIMINAR EL OUTLIER*/
entrada,/*DATASET DE ENTRADA*/
salida, /*DATASET DE SALIDA, PUEDE SER EL MISMO DE ENTRADA*/
corte_inferior, /*% DE CORTE INFERIOR*/
corte_superior);/*% DE CORTE SUPERIOR*/
*******************************************************************;
*CREAMOS LOS PERCENTILES;
data _null_;
call symput ("lim1",compress(0+&corte_inferior.));
call symput ("lim2",compress(100-&corte_superior.));
run;
*PREPARAMOS MV CON LOS NOMBRES QUE OBTENDREMOS DEL PROC UNIVARIATE;
data _null_;
call symput ('nom_lim1',compress("P_"||tranwrd("&lim1.",'.','_')));
call symput ('nom_lim2',compress("P_"||tranwrd("&lim2.",'.','_')));
run;
*EL UNIVARIATE GENERA UNA SALIDA SOLO CON LOS PERCENTILES DESEADOS;
proc univariate data=&entrada. noprint;
var &varib.;
output out=sal pctlpre=P_ pctlpts=&lim1.,&lim2.;
quit;
*CREAMOS MV CON LOS CORTES DESEADOS;
data _null_;
set sal;
call symput("inf",&nom_lim1.);
call symput("sup",&nom_lim2.);
run;
*REALIZAMOS EL FILTRO;
data &salida.;
set &entrada.;
if &varib.>&inf. and &varib.<&sup.;
run;
proc delete data=sal;run;
%mend;

Su ejemplo de uso correspondiente:


data ent;
do i=1 to 10000;
importe=rannor(2)*1000;
if ranuni(3) >= 0.95 then importe=importe * 10;
if ranuni(4) >= 0.05 then importe=importe / 10;
output;
end;
run;
*ANALIZAMOS LA VARIABLE IMPORTE;
proc univariate data=ent;
var importe;
histogram;
quit;
*RECORTAMOS UN 5% POR ARRIBA Y UN 5% POR DEBAJO;
%elimina_outliers(importe,ent,salida,5,5);
proc univariate data=salida;
var importe;
histogram;
quit;

Tenemos 2 histogramas, uno es imposible pero el otro nos permite Seguir leyendo Macros (fáciles) de SAS. Eliminar outliers en una variable