Macros SAS. Hacer 0 los valores missing de un dataset

La siguiente macro de SAS nos permite transformar los valores perdidos (missing) en valor 0 para todas las variables de un dataset. Para todas, para todas las numéricas. Esto es muy importante porque en ocasiones es necesario distinguir el valor 0 del valor missing(.). Pero puede ser muy práctica si vamos a emplear procedimientos que han de distinguir valores perdidos o, simplemente, si deseamos que nuestra tabla tenga otro aspecto.

La metodología del ejemplo que copiáis y pegáis en SAS para examinar los resultados y el log es la más apropiada, o así me lo han trasmitido algunos. Como siempre, planteemos un ejemplo. Lo primero es crear un dataset con valores missing:

*EJEMPLO DE DATASET CON VALORES PERDIDOS;

data uno;

 do i=1 to 100;

  x=ranpoi(8,45)/(rand("uniform")>0.25)*100;

  y=ranbin(5,5,.7)/(rand("uniform")>0.60)/10;

  output;

 end;

run;

Generamos un dataset aleatorio con 100 observaciones y 3 variables numéricas donde dos de ellas pueden tener valores perdidos. La macro que modifica estos valores para transformarlos a 0 crea un array con todas las variables numéricas, se lo recorre y si encuentra un missing lo cambia a 0:

%macro hazceros;

drop _i_;

array _c_(*) _numeric_;

do _i_=1 to dim(_c_);

 if _c_(_i_)=. then _c_(_i_)=0;

end;

%mend;
*EJEMPLO DE USO;

data uno;

 set uno;

 %hazceros;

run;

Vemos que nuestra macro no necesita parámetros y es sólo un array con todas las variables numéricas del dataset. Esta macro es muy práctica y seguro que os ahorra gran cantidad de código, pero insisto, transforma todas las variables numéricas y un valor perdido no es lo mismo que un valor 0.

Por supuesto, dudas, sugerencias, un trabajo excelentemente retribuido,… rvaquerizo@analisisydecision.es