我已经浏览过互联网,无法找到我需要的东西。在SAS程序结束时,我使用ods package
方法压缩了最终数据集(20GB)。我的数据集现在位于压缩文件夹中。现在,我想解压缩并读入.sas7bdat
文件,并且我不太确定该方法。
下面是一个创建永久SAS数据集并将其拉上的示例。我可以在那个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 :(得分:2)
您基本上需要将文件复制出ZIP文件并写入物理文件。您可以使用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
所以这里是完整的程序,用于创建数据集,压缩它,将其解压缩为新名称并比较两个版本。
* 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;