SASでgzipで圧縮された生データファイル(.gzファイル)を読むには? | SAS FAQ

6月 25, 2021
admin

注意: この FAQ は UNIX 環境でのファイルの読み取りに特化しており、すべての UNIX 環境で動作するとは限りません。

大きな raw データファイルを gzip で圧縮して (.gz ファイルとして) 保存することは、非常に効率的と言えます。 そのようなファイルは、しばしばオリジナルの生データファイルの 20 倍も小さくなります。 例えば、200メガバイトかかる生データファイルは、10メガバイトまで小さく圧縮されるかもしれません。 圧縮されたファイルの読み方を、小さな例で説明しましょう。 以下に示すデータファイルを考えてみよう。

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

これがrawdata.txtという生のデータファイルであれば、以下のようなSASプログラムを使って読み取ることができます。

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

ほとんどのUNIXコンピュータ(Nicco、Aristotleなど)で、

gzip rawdata.txt & 

と入力すると、rawdata.txtという圧縮バージョンが作成されるでしょう。 このファイルをSASに読み込むには、通常、まずファイルを解凍し、次に解凍したものをSASに読み込むことになります。 この場合、ファイルを解凍するのに非常に時間がかかり、ディスク容量も大きく消費されます。 その代わり、圧縮されたファイル rawdata.txt.gz を最初に解凍することなく、SAS 内で直接読み込むことができます。 SASは「オンザフライ」でファイルを解凍でき、解凍されたバージョンのファイルを別途作成することはありません。 ほとんどのUNIXコンピュータ(例えばNiccoやAristotle)では、このようなプログラムでファイルを読み込むことができます。

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; 

プログラムの中で、lrecl=80 を生データファイルの幅 (データの最長行の幅) に変更することを確認してください。 ファイルの幅がわからない場合は、ファイルの最も広い行よりも確実に広い値を使用すればよい。

このテクニックは、非常に大きなファイルを読み取るときに最もよく使用されるでしょう。 例えば、infile in obs=20; は、ファイルから最初の20個の観測値を読みます。

コメントを残す

メールアドレスが公開されることはありません。