Miten luen gzipillä pakattuja raakadatatiedostoja (.gz-tiedostot) SAS:ssa? | SAS FAQ

kesä 25, 2021
admin

Huomaa: Tämä FAQ koskee nimenomaan tiedostojen lukemista UNIX-ympäristössä, eikä se välttämättä toimi kaikissa UNIX-ympäristöissä.

Voi olla erittäin tehokasta tallentaa suuria raakadatatiedostoja, jotka on pakattu gzipillä (.gz-tiedostoina). Tällaiset tiedostot ovat usein 20 kertaa pienempiä kuin alkuperäinen raakadatatiedosto. Esimerkiksi raakadatatiedosto, joka olisi 200 megatavua, voidaan pakata vain 10 megatavun kokoiseksi. Havainnollistetaan pakatun tiedoston lukemista pienellä esimerkillä. Tarkastellaan alla olevaa datatiedostoa.

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

Jos kyseessä olisi raakadatatiedosto nimeltä rawdata.txt, voisimme lukea sen alla olevan kaltaisella SAS-ohjelmalla.

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

Useimmissa UNIX-tietokoneissa (esim. Nicco, Aristotle) voisit pakata rawdata.txt:n kirjoittamalla

gzip rawdata.txt & 

ja tämä loisi pakatun version nimeltä rawdata.txt.gz . Jos haluat lukea tämän tiedoston SAS:iin, normaalisti purkaisit ensin tiedoston pakkauksen ja lukisit sitten pakkaamattoman version SAS:iin. Tämä voi olla hyvin aikaa vievää, kun tiedosto puretaan, ja se voi kuluttaa paljon levytilaa. Sen sijaan voit lukea pakatun tiedoston rawdata.txt.gz suoraan SAS:ssa ilman, että sinun tarvitsee ensin purkaa sen pakkausta. SAS voi purkaa tiedoston pakkauksen ”lennossa” eikä koskaan luo erillistä pakkaamatonta versiota tiedostosta. Useimmissa UNIX-tietokoneissa (esim. Nicco, Aristotle) voit lukea tiedoston seuraavanlaisella ohjelmalla.

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; 

Muista muuttaa ohjelmassasi lrecl=80 raakadatatiedoston leveydeksi (pisimmän datarivin leveys). Jos et ole varma tiedoston leveydestä, käytä arvoa, joka on varmasti leveämpi kuin tiedostosi levein rivi.

Käyttäisit tätä tekniikkaa todennäköisesti silloin, kun luet hyvin suurta tiedostoa. Voit testata ohjelmaasi lukemalla vain kourallisen havaintoja käyttämällä infile-lauseen obs=-parametria, esim. infile in obs=20; lukisi vain 20 ensimmäistä havaintoa tiedostostasi.

Vastaa

Sähköpostiosoitettasi ei julkaista.