Inicio > Programming > Leer múltiples archivos externos en SAS

Leer múltiples archivos externos en SAS


En un post previo Pablink hizo la siguiente pregunta:

“¿existe alguna forma de leer varios archivos en un paso DATA sin la necesidad de llamar uno a uno con el INFILE?, es decir quiero leer 25 archivos que contienen un vector clumna cada uno (éstos se encuentran en una carpeta), y luego unirlos para crear un dataset que contenga los 25 vectores columna de los archivos”

Aquí les expongo un pequeño ejemplo de como hacerlo.

Ya que no mencionaste que tipo de archivo es, vamos a asumir que es un csv, la lógica sería la misma para cualquier archivo aunque el código puede cambiar a la hora de leer los archivos en SAS.

Paso 1: Localizar donde están nuestros archivos. Para ello utilizamos la sentencia filename, en el caso de Pablo son 25 archivos externos que si bien son fastidiosos de transcribir en nuestro código también es verdad que no es una tarea imposible. Pero imaginen por un segundo que fueran 500 archivos externos….

filename mfiles pipe ‘dir “C:\Mis Proyectos\*.csv” /b/a’;

Nota: para los que no lo sepan las opciones /b/a son del sistema DOS. No olviden colocar la ruta de sus archivos en lugar de C:\Mis Proyectos\ ;-)

Paso 2: Colocar toda la información contenida en mfiles en un SAS data set.

Data infolder;
infile mfiles truncover;
input string $20.;
path=cats(“C:\Mis Proyectos\”,string);
filename=strip(scan(string,1,’.'));
run;

Si abren el data set Infolder notaran que tenemos 3 campos:
- String: Contiene la información del archivo leído directamente de la sentencia filename.
- Path:Contiene concatenado la ruta + el nombre del archivo. ej. C:\Mis Proyectos\miarchivo.csv Esta variable será utilizada mas adelante con input para crear nuestros data sets.
- Filename: contiene exactamente la misma información que la variable string pero hemos eliminado el .csv, la idea fundamental aquí es usar esta variable para asignar el nombre a cada data set para que concuerde con el nombre del archivo externo en de realizar cualquier proceso de DQ.

Paso 3: Crear una macro para importar automáticamente todos nuestros archivos externos

%macro ReadIn(input=,output=);
PROC IMPORT OUT= WORK.&output
DATAFILE= “&input”
DBMS=CSV REPLACE;
GETNAMES=YES;
DATAROW=2;
RUN;
%mend;

Como el ejemplo es usando csv, podemos utilizar el proc import sin mayor dificultad. En el caso de ser un arhivo txt o dat podemos utilizar la macro de la siguiente manera:

%macro ReadIn(input=,output=);
Data &output
infile “&input” missover;
Input /*Aqui tus variables*/
run;
%mend;

La macro variable &output contiene la info de la variable filename y &input contiene la info referente a la variable path.

Paso 4: Invocamos la macro para generar nuestros archivos.

Data _null_;
set infolder;
call execute(‘%ReadIn(input=’!!path!!’,output=’!!filename!!’)');
run;

Una vez alcanzado este punto, el método que se eliga para unir todos los data sets y crear un solo data set es a juicio del facultativo.

Para descargar el programa completo haz click aquí

Espero les sirva!

SASludos,

Alberto

Categorías:Programming
  1. agosto 7, 2009 a las 8:45 pm | #1

    ALBERTO, MUCHAS GRACIAS POR LA SOLUCIÓN, ME HA CAIDO DE PERLAS.ESTAMOS EN CONTACTO.

  1. Aún no hay trackbacks

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.