Trucos SAS. Calcular percentiles como Excel o R

Alguna vez habréis calculado un percentil en Excel o en R y os saldrá distinto de SAS. Esto se debe a que los métodos de cálculo son distintos tanto R como Excel utilizan el mismo método consistente en una interpolación en función de la distancia entre los registros que dan la posición del percentil. SAS dispone de 5 métodos distintos para calcular el percentil y por defecto emplea el número 5 y ninguno de los 4 métodos restantes es el que utilizan R o Excel. Pero podemos programar el método de un modo sencillo, cuesta más entender porque no lo implementa SAS que calcularlo. A continuación tenéis una sencilla macro que calcula el percentil con el método de Excel:

 
%macro percentil_excel(ds /*DATOS DE ENTRADA*/
	,varib     /*VARIABLE SOBRE LA QUE SE CALCULA*/
	,percentil /*PERCENTIL DESEADO*/);

%global pct;

proc sort data=&ds. (keep=&varib.) out=intermedio; by &varib.; run; 

data _null_;
 	datossid=open('intermedio');
 	no=attrn(datossid,'nobs');
 	call symput ("obs",compress(no));
 	datossid=close(datossid);
run;

*POSICIÓN (P*(N-1)/100)+1;
data _null_;
pos = (&percentil.*(&obs.-1)/100)+1;
call symput ('entera',int(pos));
call symput ('decimal',mod(pos,1));
run;

*APROXIMACION X(p) = X[k] + d(X[k + 1] - X[k]);
data _1;
set intermedio;
if _n_=&entera. or _n_=&entera. + 1;
run;

proc transpose data=_1 out=_1; run;

data _1;
set _1;
d = col2 - col1;
percentil = col1 + &decimal. * (col2 - col1);
call symput('pct',round(percentil,0.0001));
run;

proc delete data=_1 intermedio; run;
%mend;


%percentil_excel(DATOS,x,0.5);

%put &pct.;

Una breve explicación. Creamos una tabla sólo con la variable que deseamos analizar, determinamos el número de observaciones de la tabla y la posición donde debe caer el percentil como (percentil * (observaciones – 1) entre 100 más uno. Sacamos justo los puntos k y k + 1 y realizamos la interpolación en función de la distancia de esos dos puntos para obtener la macrovariable pct que tiene el resultado que deseamos. Espero que os sea de utilidad. Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *