SAS

Truco SAS. Leer datos de Excel con SAS vía DDE

Si no disponemos del módulo Access to PC Files de SAS no podremos importar a SAS datos de Excel sin emplear el DDE. En un truco anterior vimos como vía DDE exportábamos ficheros de SAS a Excel. Empleando esta misma vía vamos a importar datos. La metodología es análoga a la empleada con la exportación. Asignamos un filename dinámico a un rango de datos de Excel, y nuestro paso data lee de ese filename para crear una tabla SAS. Partimos del una tabla ejemplo con estos datos:

Truco SAS. SAS y DDE, otra forma de exportar a Excel

Otro elemento con el que contamos para crear archivos Excel desde SAS es el DDE, una tecnología que nos permite comunicar Windows con SAS. Mediante esta comunicación podemos leer un fichero SAS y escribir en una tabla de Excel. Con el siguiente artículo os voy a introducir a otra metodología que no sólo sirve para crear ficheros Excel desde SAS si no que además nos permitirá ejecutar macros, crear gráficos,…

Estudiemos el ejemplo más sencillo que parte siempre de un fichero Excel existente :

Truco SAS. Crear ficheros Excel sin PROC EXPORT (II)

Con anterioridad hemos visto el manejo del ODS y como nos sirve para generar archivos HTML que podemos usar con Excel sin necesidad de emplear el PROC EXPORT. Pero el lenguaje SAS empleado era complicado y requería muchas líneas de código. Pues esto podemos evitarlo si creamos nuestra propia macro para exportar nuestras tablas SAS a tablas Excel.

«Simplemente» hemos de parametrizar el código que vimos en la primera parte del truco SAS. Pero realizaremos diversas modificaciones para que nuestro código sea más práctico:

Truco SAS. Crear ficheros Excel sin PROC EXPORT (I)

No disponemos del módulo ACCESS TO PC FILES y necesitamos poner nuestra tabla SAS en Excel. Usaremos el ODS (Outpus Delivery System) de SAS. Junto con el proc print crearemos un fichero HTML con extensión .XLS que podremos manejar perfectamente con Excel, insisto, no es un fichero Excel, es HTML pero que se manejará sin ningún problema en la hoja de cálculo y que podremos guardar como fichero Excel.

El primer paso para nuestro ejemplo será generar una tabla SAS con valores aleatorios que deseamos exportar a Excel:

Truco SAS. Proc format VS formato percent

El formato SAS percent nos ofrece una apariencia poco habitual a la hora de realizar informes con SAS. Necesitamos emplear el proc format ya que SAS no tiene un formato de porcentajes que se adecúe a los reportes de un buen gestor de la información. Para estudiar su uso emplearemos un ejemplo:

data uno;
format valor percent.3;
do valor=-1 to 1 by 0.25;
output;
end;
run;
proc print data=uno; run;

La ejecución de este programa nos ofrece:

Truco SAS. Cruce con proc format

Veremos un ejemplo de ahorro de tiempo haciendo un cruce con formatos. Parece curioso que los formatos ahorren tiempo frente al sort/merge y sql, ya que basicamente no están hecho para esa finalidad, pero realmente podemos ahorrarnos más del 50% del tiempo. Además lo más costoso de este método es la carga del formato, pero una vez que lo tenemos cargado podemos hacer las selecciones de todos los grandes volumenes de datos que necesitemos, con el sort/merge, tendríamos que ordenar el conjunto de datos sas ‘grande’ otra vez si no lo teniamos ordenado. Este método es realmente efectivo al cruzar tablas grandes frente a pequeñas.

Truco SAS: Dataset con los ficheros y carpetas de un directorio.

En ocasiones necesitamos listar los archivos de un directorio. En SAS se puede hacer así. Creamos una tabla en WORK archivos con los nombres de los archivos y subcarpetas de un directorio:

/*PONE ARCHIVOS DE UN DIRECTORIO EN TABLA SAS*/
%macro archivos(directorio);
data archivos;
rc=filename('dir',"&directorio.");
dirid=dopen('dir');
numarchivos=dnum(dirid);
do i=1 to numarchivos;
nombrearchivos=dread(dirid,i);
output;
end;
rc=close(dirid);
drop rc i;
run;
%mend archivos; /*EJEMPLO SI QUEREMOS QUE NOS LISTE LAS TABLAS
SAS DEL WORK*/
proc sql noprint;
select path into:ub_work
from sashelp.vlibnam
where libname = "WORK";
quit;
%archivos(&ub_work.); data archivos;
set archivos;
where index(lowcase(nombrearchivos),"sas7bdat")>1;
run;

Puede sernos de gran utilidad cuando deseemos importar un gran número de ficheros de texto o si necesitamos manejarnos con archivos y shell, empleamos las funciones de “archivo” de SAS (en breve pondré un artículo sobre las funciones SAS). El programa se puede sofisticar empleando extensiones, eliminando carpetas,… Espero vuestros comentarios y mejoras sobre el uso de esta macro.