¿Cómo puedo leer archivos de datos sin procesar comprimidos con gzip (archivos .gz) en SAS? | SAS FAQ

Jun 25, 2021
admin

Por favor, tenga en cuenta que esta FAQ es específica para la lectura de archivos en un entorno UNIX, y puede no funcionar en todos los entornos UNIX.

Puede ser muy eficiente almacenar grandes archivos de datos crudos comprimidos con gzip (como archivos .gz). Estos archivos suelen ser 20 veces más pequeños que el archivo de datos brutos original. Por ejemplo, un archivo de datos en bruto que ocuparía 200 megabytes podría comprimirse hasta ser tan pequeño como 10 megabytes. Vamos a ilustrar cómo leer un archivo comprimido con un pequeño ejemplo. Considere el archivo de datos que se muestra a continuación.

AMC Concord 220 2930 4099AMC Pacer 170 3350 4749AMC Spirit 220 2640 3799Buick Century 200 3250 4816Buick Electra 150 4080 7827 

Si se tratara de un archivo de datos en bruto llamado rawdata.txt podríamos leerlo utilizando un programa SAS como el que se muestra a continuación.

FILENAME in "rawdata.txt" ;DATA test; INFILE in ; INPUT make $ 1-14 mpg 15-18 weight 19-23 price 24-27 ;RUN; 

En la mayoría de los ordenadores UNIX (por ejemplo, Nicco, Aristóteles) se podría comprimir rawdata.txt escribiendo

gzip rawdata.txt & 

y esto crearía una versión comprimida llamada rawdata.txt.gz . Para leer este archivo en SAS, normalmente primero se descomprime el archivo y luego se lee la versión descomprimida en SAS. Esto puede llevar mucho tiempo para descomprimir el archivo, y consumir una gran cantidad de espacio en el disco. En cambio, puede leer el archivo comprimido rawdata.txt.gz directamente en SAS sin tener que descomprimirlo primero. SAS puede descomprimir el archivo «sobre la marcha» y nunca crear una versión descomprimida separada del archivo. En la mayoría de los ordenadores UNIX (por ejemplo, Nicco, Aristóteles) se podría leer el archivo con un programa como éste.

FILENAME in PIPE "gzip -dc rawdata.txt.gz" LRECL=80 ;DATA test; INFILE in ; INPUT make $ 1-14 mpg 15-18 weight 19-23 price 24-27 ;RUN; 

En su programa, asegúrese de cambiar el lrecl=80 para que sea el ancho de su archivo de datos en bruto (el ancho de la línea más larga de datos). Si no está seguro de la anchura del archivo, simplemente utilice un valor que sea ciertamente más ancho que la línea más ancha de su archivo.

Lo más probable es que utilice esta técnica cuando esté leyendo un archivo muy grande. Usted puede probar su programa mediante la lectura de un puñado de observaciones utilizando el parámetro obs= en la declaración infile, por ejemplo, infile en obs=20; leería sólo las primeras 20 observaciones de su archivo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.