Hur läser jag rådatafiler som komprimerats med gzip (.gz-filer) i SAS? | SAS FAQ

jun 25, 2021
admin

Observera att denna FAQ är specifik för läsning av filer i en UNIX-miljö och kanske inte fungerar i alla UNIX-miljöer.

Det kan vara mycket effektivt att lagra stora rådatafiler komprimerade med gzip (som .gz-filer). Sådana filer är ofta 20 gånger mindre än den ursprungliga rådatafilen. Till exempel kan en rådatafil som skulle ta 200 megabyte komprimeras till att bli så liten som 10 megabyte. Låt oss illustrera hur man läser en komprimerad fil med ett litet exempel. Betrakta datafilen som visas nedan.

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

Om detta var en rådatafil kallad rawdata.txt skulle vi kunna läsa den med hjälp av ett SAS-program som det som visas nedan.

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

På de flesta UNIX-datorer (t.ex. Nicco, Aristoteles) kan du komprimera rawdata.txt genom att skriva

gzip rawdata.txt & 

och detta skulle skapa en komprimerad version med namnet rawdata.txt.gz . För att läsa denna fil i SAS skulle du normalt sett först avkomprimera filen och sedan läsa in den okomprimerade versionen i SAS. Detta kan vara mycket tidskrävande att avkomprimera filen och ta mycket diskutrymme i anspråk. Istället kan du läsa den komprimerade filen rawdata.txt.gz direkt i SAS utan att först behöva avkomprimera den. SAS kan avkomprimera filen ”on the fly” och skapar aldrig en separat okomprimerad version av filen. På de flesta UNIX-datorer (t.ex. Nicco, Aristoteles) kan du läsa filen med ett program som detta.

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 ditt program ska du se till att ändra lrecl=80 till att vara bredden på din rådatafil (bredden på den längsta dataraden). Om du är osäker på hur bred filen är, använd bara ett värde som säkert är bredare än den bredaste raden i din fil.

Du skulle troligen använda den här tekniken när du läser en mycket stor fil. Du kan testa ditt program genom att bara läsa en handfull observationer genom att använda parametern obs= på infile-anvisningen, t.ex. infile in obs=20; skulle bara läsa de första 20 observationerna från din fil.

Lämna ett svar

Din e-postadress kommer inte publiceras.