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.
Hola, muy buena la idea.
Puedo consultar (ya que soy ignorante en SAS) como puedo incluir/añadir en tu macro el calculo de percentiles pero por una variable de agrupamiento ademas.
Es decir, incluir un BY &varib2 en algun lugar de la macro, además de la &varib.
Muchas gracias desde ya.