----------------------------------------------------------------------------------------------------------------------------------------------
※このブログは、Chris Hemedinger によるブログ『The SAS Dummy』の記事を翻訳したものです。
原文は以下URLよりお読みいただけます。
https://blogs.sas.com/content/sasdummy/2017/10/10/reading-writing-gzip-files-sas/
----------------------------------------------------------------------------------------------------------------------------------------------
SAS 9.4 Maintenance 5には、直接GZIPファイルを読み書きするための新しいサポートが追加されました。GZIPファイル(通常、ファイル拡張子は.gz)は、ZIPファイルとは異なる形式のファイルです。両方とも圧縮ファイルの形式ですが、GZIPファイルが通常単一ファイルを圧縮したものであるのに対し、ZIPファイルは「アーカイブ」(仮想フォルダ内で圧縮されたファイルの集合体)です。GZIPツールは、UNIX/Linuxプラットフォームに組み込まれており、ログファイルやcsvファイルなどファイルサイズが大きなテキストベースのファイルを格納するスペースを節約したい場合によく使用されます。GZIPファイルを圧縮する際に使用されるアルゴリズムは、特にテキストファイルの処理に効果的です。しかしながら、技術的にはどのようなファイルもGZIPを実行することができます。
これまで、FILENAME ZIPを使用してSASでZIPアーカイブを読み書きする方法について様々な記事を書いてきました。最新版のSASでは、FILENAME ZIPメソッドを拡張することにより、GZIPのサポートを追加しました。GZIPファイルを使用する際は、FILENAMEステートメントにGZIPをキーワードとして追加します。
例:
filename my_gz ZIP "path-to-file/compressedfile.txt.gz" GZIP;
以下は、ログファイルの圧縮版を作成する例です。
filename source "C:\Logs\SEGuide_log.10168.txt";
filename tozip ZIP "C:\Logs\SEGuide_log.10168.txt.gz" GZIP;
data _null_;
infile source;
file tozip ;
input;
put _infile_ ;
run;
私のテストでは、結果として圧縮ファイルは容量のわずか14%しか占有せず、サイズに大きな差が出ました。
圧縮されたファイルを再度展開するには、逆の操作を実行します。(ここでENCODINGオプションを追加したのは、使用しているログファイルがUTF-8でエンコーディングされているためです。)
filename target "C:\LogsExpanded\SEGuide_log.10168.txt" encoding='utf-8';
filename fromzip ZIP "C:\Logs\SEGuide_log.10168.txt.gz" GZIP;
data _null_;
infile fromzip;
file target ;
input;
put _infile_ ;
run;
SASで読み込むために、圧縮済みのテキストファイルを明示的に展開する必要はありません。直接.gzファイルを読み込み解析するには、UNIXシェルで慣れ親しんだzcatコマンドに類似しているGZIPメソッドを使用することができます。
filename fromzip ZIP "C:\Logs\SEGuide_log.10168.txt.gz" GZIP;
data logdata;
infile fromzip; /* read directly from compressed file */
input date : yymmdd10. time : anydttme. ;
format date date9. time timeampm.;
run;
たとえばSASデータセット(sas7bdat)、またはExcel(XLSまたは、XLSX)などファイルがバイナリ形式の場合、それをデータとして読み込む前に、完全に展開しておくことが必要です。これらのファイルは、バイトを順次処理しない特殊なドライバを使用して読み込まれるため、ディスク上にファイル全体を用意することが必要です。
注意: 各GZIPファイルは単に一つの圧縮されたファイルを表すため、MEMBER=オプションは適用されません。複数のファイルを含むZIPファイルアーカイブを扱う場合は、MEMBER=オプションをFILENAME ZIPで使用して必要な特定のファイルを指定することができます。別途投稿したFINFOおよびファイルの詳細に関する例は、このアプローチに重点を置いたものです。ただし、GZIPオプションとMEMBER=オプションは相互に排他的です。その方法では、はるかに簡単にできます…ちょうどUNIXシェルと同じような方法で。
* ZIP drive image By © Raimond Spekking / CC BY-SA 4.0 (via Wikimedia Commons), CC BY-SA 4.0, Link
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
コミュニティの基本的なガイドラインについてご説明します。まずは、こちらをご参照ください。
SAS Support CommunitiesのFAQはヘルプに記載されています。参照方法は、こちらからご確認ください。
Japan SAS Discussionページに質問や意見(メッセージ)を投稿/返信する方法を簡単にご説明します。
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.