读取压缩的 sas 数据集并动态压缩它们

Reading zipped sas datasets and zipping them on the fly

我在具有 gzip 压缩功能的 unix 服务器上处理大文件,出于 space 的目的,我希望文件保持压缩状态。我知道如何读取压缩的 txt 文件,但随后想: 1) 压缩从压缩的 txt 文件创建的数据集 2) 稍后在另一个 datastep/procedure.

中设置这个压缩的 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;

SAS 无法使用您想要的简单数据步骤以压缩格式(*.7z / *.gzip / *.zip 等)存储 sas 数据集。您需要外部 zip 实用程序来执行此操作(使用 x 语句等)或使用 ods 包。在读取 SAS 数据集之前和之后,需要分别对解压缩和压缩 zip 文件进行单独的逻辑编码。

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

OPTIONS COMPRESS=(YES|CHAR|BINARY)

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

您可以在有关 SAS 用于压缩数据集的算法的语言参考中阅读更多内容。

有关更多详细信息,请参阅 SAS Language Ref 中的以下 link:http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000202890.htm

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

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

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