miércoles, 22 de febrero de 2017

Corrección automática de nulos en tablas SAS

En la misma línea que este post anterior: detectar nulos en tablas SAS, añadimos un nuevo programa de ejemplo de SAS para automatizar la detección de nulos en una tabla SAS.


Se trata de una macro que revisa todos los campos de una tabla identificando nulos. Los nulos de variables de tipo numérico los sustituye por 0 y los de variables alfanuméricas por un carácter determinado, en este caso '-'. La macro valida por un lado las variables numéricas y por otra las alfanuméricas apoyándose en un array. Recibe como argumento el nombre de la tabla a validar (tabin) y genera una tabla nueva (tabout) que podría ser la misma. Se podría modificar para que los valores de sustitución para nulos de numéricos y alfanuméricos se recibieran como argumento. Esperemos os sea de utilidad.

-------------------------------------------------------------------------------------------------------------------------

This is a SAS macro that check all variables in a SAS dataset detecting null values. Null values of numeric variables are replaced by 0 and null values of character variables are replaced by  character '-'.  Macro validates numerics and character variables separated using two arrays to store both type of variables. The arguments of macro are the name of dataset to be checked (tabin) and a new dataset created (tabout) that it could be the same. You can modify the macro to add new arguments with the values to replace nulls of numeric and character variables. I hope it will be a usefull example.


-------------------------------------------------------------------------------------------------------------------------

Código SAS / SAS code:

%macro reemplazar_nulos(tabin, tabout);

data &tabout(drop = i);
set &tabin;
array num(*) _numeric_; /* array con todos los campos numericos */
array car(*) _character_; /* array con todos los campos alfanumericos */
do i=1 to dim(num);
if num(i)=. then num(i)=0;
end;
do i=1 to dim(car);
if car(i)=. then car(i)='-';
end;
run;

%mend;


Formación / training

No hay comentarios:

Publicar un comentario