BookmarkSubscribeRSS Feed
SASによるGZIPファイルの読み込みと書き込み
sakura_sas
SAS Employee

----------------------------------------------------------------------------------------------------------------------------------------------

※このブログは、Chris Hemedinger によるブログ『The SAS Dummy』の記事を翻訳したものです。

 原文は以下URLよりお読みいただけます。

 https://blogs.sas.com/content/sasdummy/2017/10/10/reading-writing-gzip-files-sas/

----------------------------------------------------------------------------------------------------------------------------------------------


gzip.png

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%しか占有せず、サイズに大きな差が出ました。

sizediff.png

 

 

 

 

 

圧縮されたファイルを再度展開するには、逆の操作を実行します。(ここで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)、またはExcelXLSまたは、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

 

 

 

 

 

sas-innovate-wordmark-2025-midnight.png

Register Today!

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.


Register now!

Article Labels
Article Tags

SAS Support Communitiesのユーザーガイドライン


コミュニティの基本的なガイドラインについてご説明します。まずは、こちらをご参照ください。

詳細を読む

 

SAS Support CommunitiesのFAQ


SAS Support CommunitiesのFAQはヘルプに記載されています。参照方法は、こちらからご確認ください。

詳細を読む

 

質問や意見の投稿と返信方法について


Japan SAS Discussionページに質問や意見(メッセージ)を投稿/返信する方法を簡単にご説明します。

詳細を読む