Hvordan læser jeg rå datafiler komprimeret med gzip (.gz-filer) i SAS? | SAS FAQ

jun 25, 2021
admin

Bemærk venligst: Denne FAQ er specifik for læsning af filer i et UNIX-miljø og fungerer muligvis ikke i alle UNIX-miljøer.

Det kan være meget effektivt at gemme store rå datafiler komprimeret med gzip (som .gz-filer). Sådanne filer er ofte 20 gange mindre end den oprindelige rådatafil. F.eks. kan en rådatafil, der ville fylde 200 megabyte, komprimeres til at være så lille som 10 megabyte. Lad os illustrere, hvordan man læser en komprimeret fil, med et lille eksempel. Overvej den datafil, der er vist nedenfor.

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

Hvis der var tale om en rå datafil kaldet rawdata.txt kunne vi læse den ved hjælp af et SAS-program som det nedenfor viste.

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

På de fleste UNIX-computere (f.eks. Nicco, Aristoteles) kunne du komprimere rawdata.txt ved at skrive

gzip rawdata.txt & 

og dette ville skabe en komprimeret version med navnet rawdata.txt.gz . For at læse denne fil i SAS ville man normalt først afkomprimere filen og derefter læse den ukomprimerede version i SAS. Dette kan være meget tidskrævende at udpakke filen og opbruge en stor mængde diskplads. I stedet kan du læse den komprimerede fil rawdata.txt.gz direkte i SAS uden først at skulle udpakke den. SAS kan afkomprimere filen “on the fly” og opretter aldrig en separat ukomprimeret version af filen. På de fleste UNIX-computere (f.eks. Nicco, Aristoteles) kan du læse filen med et program som dette.

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; 

I dit program skal du sørge for at ændre lrecl=80 til at være bredden på din rådatafil (bredden på den længste datalinje). Hvis du er usikker på, hvor bred filen er, skal du blot bruge en værdi, der helt sikkert er bredere end den bredeste linje i din fil.

Du vil højst sandsynligt bruge denne teknik, når du læser en meget stor fil. Du kan teste dit program ved blot at læse en håndfuld observationer ved at bruge parameteren obs= på infile-erklæringen, f.eks. infile in obs=20; ville kun læse de første 20 observationer fra din fil.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.