Comment lire des fichiers de données brutes compressés avec gzip (fichiers .gz) dans SAS ? | SAS FAQ

Juin 25, 2021
admin

Veuillez noter : cette FAQ est spécifique à la lecture de fichiers dans un environnement UNIX, et peut ne pas fonctionner dans tous les environnements UNIX.

Il peut être très efficace de stocker de grands fichiers de données brutes compressés avec gzip (en tant que fichiers .gz). Ces fichiers sont souvent 20 fois plus petits que le fichier de données brutes original. Par exemple, un fichier de données brutes qui prendrait 200 mégaoctets peut être compressé à 10 mégaoctets seulement. Illustrons comment lire un fichier compressé à l’aide d’un petit exemple. Considérons le fichier de données présenté ci-dessous.

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

S’il s’agissait d’un fichier de données brutes appelé rawdata.txt, nous pourrions le lire en utilisant un programme SAS comme celui présenté ci-dessous.

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

Sur la plupart des ordinateurs UNIX (par exemple, Nicco, Aristote), vous pourriez compresser rawdata.txt en tapant

gzip rawdata.txt & 

et cela créerait une version compressée nommée rawdata.txt.gz . Pour lire ce fichier dans SAS, il faudrait normalement commencer par décompresser le fichier, puis lire la version non compressée dans SAS. Cela peut prendre beaucoup de temps pour décompresser le fichier et consommer beaucoup d’espace disque. Au lieu de cela, vous pouvez lire le fichier compressé rawdata.txt.gz directement dans SAS sans avoir à le décompresser au préalable. SAS peut décompresser le fichier  » à la volée  » et ne crée jamais une version non compressée distincte du fichier. Sur la plupart des ordinateurs UNIX (par exemple, Nicco, Aristote), vous pourriez lire le fichier avec un programme comme celui-ci.

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; 

Dans votre programme, assurez-vous de changer le lrecl=80 pour être la largeur de votre fichier de données brutes (la largeur de la plus longue ligne de données). Si vous n’êtes pas sûr de la largeur du fichier, utilisez simplement une valeur qui est certainement plus large que la ligne la plus large de votre fichier.

Vous utiliseriez très probablement cette technique lorsque vous lisez un très grand fichier. Vous pouvez tester votre programme en lisant juste une poignée d’observations en utilisant le paramètre obs= sur l’instruction infile, par exemple, infile in obs=20 ; ne lirait que les 20 premières observations de votre fichier.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.