2017-02-17 102 views
1

私はインターネットを磨き、必要なものを正確に見つけることができません。 SASプログラムの最後に、ods packageメソッドを使用して最終データセット(20GB)を圧縮しました。私のデータセットは、現在、必要に応じてzipフォルダに格納されます。さて、解凍してそのファイル.sas7bdatを読み込みたいのですが、その方法についてはあまりよく分かりません。SASは1つのsas7bdatファイルを解凍します

以下は、永続的なSASデータセットを作成し、それを圧縮する例です。 Iそのzipファイルの中に見て、私は必要なデータセット「を参照してください。」ことができるが、私はそれを解凍し、それを読むためにどのようには考えている:あなたは基本的にZIPの外にファイルをコピーする必要があり

** assign your path **; 
libname output "H:\SAS Example Code"; 
%let path = H:\SAS Example Code; 

** test data **; 
data output.class; set sashelp.class; run; 

** zip the permanent SAS dataset **; 
ods package(zip) open nopf; 
ods package(zip) 
    add file="&path./class.sas7bdat"; 
ods package(zip) 
    publish archive   
    properties(
     archive_name= "sashelp.class.zip"     
     archive_path="&path." 
     ); 
ods package(zip) close; 

/* BELOW THIS LINE NEEDS WORK -- HOW DO I READ IN THIS DATASET? */ 

** assign filename and point to zip file **; 
filename inzip zip "&path./sashelp.class.zip"; 

** view the .sas7bdat file within the zip file **; 
data contents(keep=memname); 
    length memname $200; 
    fid=dopen("inzip"); 
     if fid=0 then stop; 
    memcount=dnum(fid); 
     do i=1 to memcount; 
      memname=dread(fid,i); 
     output; 
     end; 
    rc=dclose(fid); 
run; 
+0

これを行うネイティブな方法には気づいていません。あなたはunzipコマンドをOSにパイプしなければならないと思います。あなたはその能力を持っていますか? – Joe

+0

zipファイルではなく、compress = YESを追加するか、オプションの代わりにCPTまたはXPTファイルを使用しますか?次に、ファイルにアクセスする簡単な方法があります。 – Reeza

+0

@Joeサーバー権限のために 'X'コマンドを使用することはできませんが、私はスクリプトとバッチ処理にPuTTYを使用します。私の最善の策は、SASを使用して圧縮し、必要なときにPuTTYを使用して解凍することです。 – Foxer

答えて

2

ファイルを作成し、物理ファイルに書き込みます。 Chris HemedingerがSAS Dummyのブログに載せたユーティリティを使うことができます。 http://blogs.sas.com/content/sasdummy/2013/09/17/copy-file-macro/

残念ながら、私はFCOPY()コマンドを使ってファイルを正しくコピーできませんでしたが、彼が投稿したマクロはファイルをコピーするデータステップを使用するだけです。 http://blogs.sas.com/content/sasdummy/files/2013/09/binaryfilecopy.sas_.txt

データセットを作成し、圧縮して新しい名前に解凍し、2つのバージョンを比較する完全なプログラムです。

* Get path of current WORK directory ; 
%let work=%sysfunc(pathname(work)); 

* Make a new work dataset ; 
data work.class; set sashelp.class; run; 

** Make the ZIP file **; 
ods package(zip) open nopf; 
ods package(zip) add file="&work./class.sas7bdat"; 
ods package(zip) publish archive 
    properties(
     archive_name= "sashelp.class.zip" 
     archive_path="&work." 
     ) 
; 
ods package(zip) close; 

* Create filerefs pointing to the source and target ; 
filename zipin zip "&work/sashelp.class.zip" member="class.sas7bdat" ; 
filename ssdout "&work/class2.sas7bdat"; 

* Use BINARYFILECOPY macro from Chris ; 
%binaryFileCopy 
(infile=zipin 
,outfile=ssdout 
); 

* Check if it worked ; 
proc compare data=class compare=class2; run; 
関連する問題