Wie lese ich mit gzip komprimierte Rohdaten-Dateien (.gz-Dateien) in SAS? | SAS FAQ

Jun 25, 2021
admin

Bitte beachten Sie: Diese FAQ ist spezifisch für das Lesen von Dateien in einer UNIX-Umgebung und funktioniert möglicherweise nicht in allen UNIX-Umgebungen.

Es kann sehr effizient sein, große Rohdatendateien zu speichern, die mit gzip (als .gz-Dateien) komprimiert wurden. Solche Dateien sind oft 20 Mal kleiner als die ursprüngliche Rohdatendatei. Eine Rohdatendatei, die 200 Megabyte umfassen würde, kann zum Beispiel auf 10 Megabyte komprimiert werden. Lassen Sie uns anhand eines kleinen Beispiels veranschaulichen, wie eine komprimierte Datei gelesen werden kann. Betrachten Sie die unten abgebildete Datendatei.

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

Wenn dies eine Rohdatendatei mit dem Namen rawdata.txt wäre, könnten wir sie mit einem SAS-Programm wie dem unten gezeigten lesen.

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

Auf den meisten UNIX-Computern (z.B. Nicco, Aristoteles) könnte man rawdata.txt komprimieren, indem man

gzip rawdata.txt & 

eintippt, und dies würde eine komprimierte Version mit dem Namen rawdata.txt.gz erzeugen. Um diese Datei in SAS einzulesen, würden Sie normalerweise zuerst die Datei dekomprimieren und dann die unkomprimierte Version in SAS einlesen. Das Dekomprimieren der Datei kann sehr zeitaufwendig sein und viel Speicherplatz beanspruchen. Stattdessen können Sie die komprimierte Datei rawdata.txt.gz direkt in SAS lesen, ohne sie vorher dekomprimieren zu müssen. SAS kann die Datei „on the fly“ dekomprimieren und erstellt keine separate unkomprimierte Version der Datei. Auf den meisten UNIX-Rechnern (z.B. Nicco, Aristoteles) können Sie die Datei mit einem Programm wie diesem lesen.

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; 

Ändern Sie in Ihrem Programm lrecl=80 so, dass es der Breite Ihrer Rohdatendatei entspricht (der Breite der längsten Datenzeile). Wenn Sie sich nicht sicher sind, wie breit die Datei ist, verwenden Sie einfach einen Wert, der auf jeden Fall breiter ist als die breiteste Zeile Ihrer Datei.

Sie werden diese Technik am ehesten anwenden, wenn Sie eine sehr große Datei lesen. Sie können Ihr Programm testen, indem Sie nur eine Handvoll Beobachtungen lesen, indem Sie den Parameter obs= in der infile-Anweisung verwenden, z. B. infile in obs=20; würde nur die ersten 20 Beobachtungen aus Ihrer Datei lesen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.