2017-02-17 3 views
1

Ich habe das Internet durchforstet und kann nicht genau finden, was ich brauche. Am Ende eines SAS-Programms habe ich den endgültigen Datensatz (20 GB) mit der Methode ods package gezippt. Mein Datensatz befindet sich nun wie gewünscht in einem gezippten Ordner. Jetzt möchte ich in dieser .sas7bdat Datei entpacken und lesen, und ich bin nicht ganz sicher über die Methode.SAS entpacken Sie eine einzige sas7bdat Datei

Unten sehen Sie ein Beispiel, das ein permanentes SAS-Dataset erstellt und es zippt. Ich bin in dieser ZIP-Datei aussehen kann und „sehen“ den Datensatz ich brauche, aber ich habe keine Ahnung, wie es zu entpacken und lesen in:

** 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

Nicht bewusst, eine native Möglichkeit, das zu tun - ich denke, Sie müssten einen Unzip-Befehl an das Betriebssystem leiten. Hast du diese Fähigkeit? – Joe

+0

Anstatt eine Zip-Datei hinzuzufügen, wird compress = YES oder eine CPT- oder XPT-Datei anstelle einer Option verwendet? Dann gibt es einfachere Möglichkeiten, auf die Datei zuzugreifen. – Reeza

+0

@Joe Ich kann einen 'X' Befehl wegen Server-Berechtigungen nicht verwenden, aber ich benutze PuTTY für Skripting und Batch-Prozesse. Ich denke, meine beste Wette ist es, mit SAS zu komprimieren und entpacken mit PuTTY, wenn erforderlich. – Foxer

Antwort

2

Sie im Grunde die Datei aus dem ZIP kopieren müssen Datei und schreibe in eine physische Datei. Sie können das Hilfsprogramm verwenden, das Chris Hemedinger in seinem SAS Dummy Blog veröffentlicht hat. http://blogs.sas.com/content/sasdummy/2013/09/17/copy-file-macro/

Leider konnte ich den FCOPY() Befehl die Datei nicht richtig zu kopieren, aber das Makro ihm geschrieben, dass nur ein Datum Schritt verwendet die Datei funktioniert zu kopieren. http://blogs.sas.com/content/sasdummy/files/2013/09/binaryfilecopy.sas_.txt

Also hier ist ein komplettes Programm zum Erstellen eines Datensatzes, zippen Sie es, entpacken Sie es auf einen neuen Namen und vergleichen Sie die beiden Versionen.

* 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;