Hoe lees ik bestanden met ruwe gegevens die zijn gecomprimeerd met gzip (.gz-bestanden) in SAS? | SAS FAQ

jun 25, 2021
admin

Let op: deze FAQ heeft specifiek betrekking op het lezen van bestanden in een UNIX-omgeving, en werkt mogelijk niet in alle UNIX-omgevingen.

Het kan zeer efficiënt zijn om grote bestanden met ruwe gegevens op te slaan die zijn gecomprimeerd met gzip (als .gz-bestanden). Dergelijke bestanden zijn vaak 20 keer kleiner dan het oorspronkelijke bestand met ruwe gegevens. Bijvoorbeeld, een bestand met ruwe gegevens dat 200 megabytes zou vergen, kan worden gecomprimeerd tot slechts 10 megabytes. Laten we met een klein voorbeeld illustreren hoe een gecomprimeerd bestand kan worden gelezen. Beschouw het gegevensbestand hieronder.

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

Als dit een bestand met ruwe gegevens zou zijn, rawdata.txt genaamd, zouden we het kunnen lezen met een SAS-programma zoals hieronder is afgebeeld.

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

Op de meeste UNIX-computers (bijv. Nicco, Aristoteles) zou je rawdata.txt kunnen comprimeren door

gzip rawdata.txt & 

te typen en dit zou een gecomprimeerde versie met de naam rawdata.txt.gz creëren. Om dit bestand in SAS in te lezen, zou u normaal gesproken eerst het bestand decomprimeren, en dan de gedecomprimeerde versie in SAS inlezen. Dit kan erg tijdrovend zijn en veel schijfruimte in beslag nemen. In plaats daarvan kan het gecomprimeerde bestand rawdata.txt.gz direct in SAS worden ingelezen zonder dat het eerst moet worden uitgepakt. SAS kan het bestand “on the fly” uitpakken en hoeft nooit een aparte ongecomprimeerde versie van het bestand aan te maken. Op de meeste UNIX computers (b.v. Nicco, Aristoteles) zou je het bestand kunnen lezen met een programma als dit.

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; 

In uw programma moet u lrecl=80 de breedte van uw bestand met ruwe gegevens geven (de breedte van de langste regel met gegevens). Als u niet zeker weet hoe breed het bestand is, gebruik dan een waarde die zeker breder is dan de breedste regel van uw bestand.

U zou deze techniek waarschijnlijk gebruiken wanneer u een zeer groot bestand leest. U kunt uw programma testen door slechts een handvol waarnemingen te lezen met behulp van de parameter obs= op het infile statement, bijvoorbeeld, infile in obs=20; zou alleen de eerste 20 waarnemingen uit uw bestand lezen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.