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 por qué 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)) / 100 + 1. 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.