Jak odczytać w SAS pliki surowych danych skompresowanych za pomocą gzip (pliki.gz)? | SAS FAQ
Uwaga: To FAQ jest specyficzne dla odczytu plików w środowisku UNIX i może nie działać we wszystkich środowiskach UNIX.
Przechowywanie dużych plików surowych danych skompresowanych za pomocą gzip (jako pliki .gz) może być bardzo wydajne. Takie pliki są często 20 razy mniejsze niż oryginalny plik surowych danych. Na przykład, surowy plik danych, który zajmowałby 200 megabajtów może być skompresowany do rozmiaru 10 megabajtów. Zilustrujmy sposób odczytu skompresowanego pliku na małym przykładzie. Rozważmy plik danych pokazany poniżej.
AMC Concord 220 2930 4099AMC Pacer 170 3350 4749AMC Spirit 220 2640 3799Buick Century 200 3250 4816Buick Electra 150 4080 7827
Gdyby to był surowy plik danych o nazwie rawdata.txt, moglibyśmy go odczytać za pomocą programu SAS, takiego jak ten pokazany poniżej.
FILENAME in "rawdata.txt" ;DATA test; INFILE in ; INPUT make $ 1-14 mpg 15-18 weight 19-23 price 24-27 ;RUN;
Na większości komputerów UNIX (np. Nicco, Aristotle) można by skompresować rawdata.txt wpisując
gzip rawdata.txt &
i to stworzyłoby skompresowaną wersję o nazwie rawdata.txt.gz . Aby wczytać ten plik do SAS, zwykle najpierw należy go odkompresować, a następnie wczytać nieskompresowaną wersję do SAS. Odkompresowanie pliku może być bardzo czasochłonne i zajmować dużo miejsca na dysku. Zamiast tego, można odczytać skompresowany plik rawdata.txt.gz bezpośrednio w SAS, bez konieczności jego wcześniejszego rozpakowywania. SAS może dekompresować plik „w locie” i nigdy nie tworzy oddzielnej nieskompresowanej wersji pliku. Na większości komputerów UNIX (np. Nicco, Aristotle) można odczytać plik za pomocą programu takiego jak ten.
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;
W swoim programie, upewnij się, że zmieniłeś lrecl=80 na szerokość pliku z surowymi danymi (szerokość najdłuższej linii danych). Jeśli nie jesteś pewien, jak szeroki jest plik, po prostu użyj wartości, która jest z pewnością szersza niż najszersza linia twojego pliku.
Najprawdopodobniej używałbyś tej techniki, gdy czytasz bardzo duży plik. Możesz przetestować swój program czytając tylko garść obserwacji używając parametru obs= w instrukcji infile, np. infile in obs=20; przeczytałby tylko pierwsze 20 obserwacji z twojego pliku.