Como faço para ler arquivos de dados brutos comprimidos com gzip (.gz files) no SAS? | SAS FAQ

Jun 25, 2021
admin

Please note: Esta FAQ é específica para ler arquivos em um ambiente UNIX, e pode não funcionar em todos os ambientes UNIX.

Pode ser muito eficiente para armazenar grandes arquivos de dados brutos comprimidos com gzip (como arquivos .gz). Tais arquivos geralmente são 20 vezes menores do que o arquivo de dados brutos original. Por exemplo, um arquivo de dados brutos que levaria 200 megabytes poderia ser comprimido para ser tão pequeno quanto 10 megabytes. Vamos ilustrar como ler um arquivo comprimido com um pequeno exemplo. Considere o arquivo de dados mostrado abaixo.

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

Se este fosse um arquivo de dados brutos chamado rawdata.txt, poderíamos lê-lo usando um programa SAS como o mostrado abaixo.

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

Na maioria dos computadores UNIX (por exemplo, Nicco, Aristóteles) você poderia comprimir rawdata.txt digitando

gzip rawdata.txt & 

e isto criaria uma versão comprimida chamada rawdata.txt.gz . Para ler este arquivo no SAS, normalmente você primeiro descomprimiria o arquivo, e depois leria a versão descomprimida no SAS. Isto pode ser muito demorado para descomprimir o arquivo, e consumir uma grande quantidade de espaço em disco. Em vez disso, você pode ler o arquivo comprimido rawdata.txt.gz diretamente dentro da SAS sem ter que descomprimi-lo primeiro. SAS pode descomprimir o arquivo “on the fly” e nunca criar uma versão separada do arquivo descompactado. Na maioria dos computadores UNIX (por exemplo, Nicco, Aristóteles) você poderia ler o arquivo com um programa como este.

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; 

No seu programa, não se esqueça de alterar o lrecl=80 para ser a largura do seu ficheiro de dados em bruto (a largura da maior linha de dados). Se você não tem certeza da largura do arquivo, basta usar um valor que certamente seja maior do que a linha mais larga do seu arquivo.

Você provavelmente usaria esta técnica quando estiver lendo um arquivo muito grande. Você pode testar seu programa apenas lendo um punhado de observações usando o parâmetro obs= no comando infile, por exemplo, infile in obs=20; você leria apenas as primeiras 20 observações do seu arquivo.

Deixe uma resposta

O seu endereço de email não será publicado.