2015-04-14 171 views
0

我正在使用gzip压缩功能处理unix服务器上的大文件,并且为了空间目的而希望文件保持压缩。我知道如何读取压缩的txt文件,但会想要: 1)压缩从压缩的txt文件创建的数据集 2)稍后将此压缩的sas数据集设置在另一个datastep /过程中。读取压缩的sas数据集并将它们即时压缩

这可能吗?如果是这样,请修改下面的代码,这是我希望做什么:

libname lib "path"; 
filename txtfile PIPE "gzip -dc filepath"; 

data lib.ds1; **would like this to be a zipped sas dataset**; 
    infile txtfile dlm="|" missover dsd; 
    input *columns*; 
run; 
data lib.ds2; **would like this to be a zipped sas dataset**; 
    set lib.ds1; *setting the zipped sas dataset; 
run; 
+0

另请参阅相关的[这里的问题](http://stackoverflow.com/questions/18457033/is-there-a-way-to-zip-a-from-from-within-a-sas-script-没有启用-XCMD);其中一些概念也可能起作用。 – Joe

回答

2

尝试从SAS会话执行GZIP命令。

data _null_; 
    command = 'gzip -c /path/ds2.sas7bdat > /path/ds2.sas7bdat.gz'; 
    call system (command); 
run; 

出于测试目的,请保留-c选项。这样您可以保留原始文件并将其与新压缩的文件进行比较。

+1

请注意,这需要'OPTIONS XCMD',它在SAS的服务器实例中默认处于关闭状态。 – Joe

2

SAS不能SAS数据集存储在压缩格式(* .7z压缩/ * .GZIP/* .zip文件等),使用简单datastep像你要。您需要使用外部zip实用程序(使用x语句等)或使用ods包。单独的逻辑需要分别编码,以便在分别读取和读取SAS数据集之前对zip文件进行解压缩和压缩。

虽然SAS具有内置的压缩​​数据集的能力,但使用COMPRESS =数据集选项或系统选项创建的数据集可压缩数据文件。压缩非常好。

OPTIONS COMPRESS=(YES|CHAR|BINARY) 

DATA MYSASDATA(COMPRESS=YES|CHAR|BINARY); 

你可以阅读更多关于算法语言参考使用SAS来压缩数据集。

参阅从SAS语言参考以下链接了解详细:http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000202890.htm

+2

压缩是好的,但它不如Zip压缩或类似。我记得有一个项目,我的数据集是未压缩的10GB,压缩了2GB,压缩了10MB。 (很多稀疏的数据。) – Joe