Jak mohu v SAS číst surové datové soubory komprimované pomocí gzip (.gz soubory)? | SAS FAQ

Čvn 25, 2021
admin

Upozornění: Tento FAQ je specifický pro čtení souborů v prostředí UNIX a nemusí fungovat ve všech prostředích UNIX.

Ukládání velkých souborů surových dat komprimovaných pomocí gzip (jako soubory .gz) může být velmi efektivní. Takové soubory jsou často 20krát menší než původní soubor surových dat. Například soubor surových dat, který by zabral 200 megabajtů, může být zkomprimován tak, aby měl pouhých 10 megabajtů. Ukažme si čtení komprimovaného souboru na malém příkladu. Uvažujme datový soubor uvedený níže.

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

Pokud by se jednalo o surový datový soubor nazvaný data.txt, mohli bychom jej přečíst pomocí programu SAS, jako je ten, který je uveden níže.

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

Na většině počítačů se systémem UNIX (např. Nicco, Aristotle) byste mohli soubor rawdata.txt zkomprimovat zadáním příkazu

gzip rawdata.txt & 

a vznikla by komprimovaná verze s názvem rawdata.txt.gz . Chcete-li tento soubor načíst do SASu, za normálních okolností byste soubor nejprve rozkomprimovali a poté do SASu načetli nekomprimovanou verzi. To může být časově velmi náročné na rozbalení souboru a spotřebuje to velké množství místa na disku. Místo toho můžete komprimovaný soubor rawdata.txt.gz číst přímo v SAS, aniž byste jej museli nejprve rozbalovat. SAS dokáže soubor dekomprimovat „za běhu“ a nikdy nevytváří samostatnou nekomprimovanou verzi souboru. Na většině počítačů se systémem UNIX (např. Nicco, Aristoteles) můžete soubor přečíst pomocí programu, jako je tento.

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; 

V programu nezapomeňte změnit lrecl=80 na šířku souboru s nezpracovanými daty (šířka nejdelšího řádku dat). Pokud si nejste jisti, jak je soubor široký, prostě použijte hodnotu, která je určitě širší než nejširší řádek vašeho souboru.

Tuto techniku byste nejspíše použili při čtení velmi velkého souboru. Svůj program můžete otestovat tak, že přečtete jen několik pozorování pomocí parametru obs= v příkazu infile, např. infile in obs=20; by přečetl jen prvních 20 pozorování z vašeho souboru.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.