我有一个 SAS 服务器的用户,他希望能够通过将文件“zip”编程到同一个脚本中来“压缩”他们从 SAS 脚本输出的文件。
我很犹豫是否启用 XCMD 以允许在运行 SAS 的 Linux 服务器上本地完成此操作。有谁知道不启用 XCMD 的另一种方法?
我有一个 SAS 服务器的用户,他希望能够通过将文件“zip”编程到同一个脚本中来“压缩”他们从 SAS 脚本输出的文件。
我很犹豫是否启用 XCMD 以允许在运行 SAS 的 Linux 服务器上本地完成此操作。有谁知道不启用 XCMD 的另一种方法?
我没有安装 UNIX,因此无法使用 -NOXCMD 进行测试。
在 Unix 中,您可以像使用任何其他 Unix 进程一样使用 SAS 通过管道进行写入。
取决于他们在做什么。
如果他们正在生成 .sas7bdat(SAS 数据集),那么options compress=yes;
(或=char
)将压缩 SAS 数据集,一些。它不会像普通的 gzip 压缩那样压缩。
如果他们正在写出一个文本文件,那么有一种方法可以写一个 zip 文件。在 9.4 中,这是生产;有关更多信息,请参阅此文档页面。基本上你可以这样写:
filename myfile zip '//mydir/myfile.z';
然后像普通文件一样写入它。如果您将它们作为文本文件读入并将它们逐行写回 zip fileref,则您可能也可以将其他类型的文件写入此文件(例如 HTML);但目前没有太多关于这方面的信息,因为它是全新的。
在 9.4 之前,有SASZIPAM
文件名引擎,官方不支持,不适合生产使用。您也许可以类似地使用它。
如果他们正在编写 PDF 或类似文件,那么可能没有合适的方法可以这样做,除非您可以使用 zip 文件名引擎,通过使用 recfmt=n 读取 pdf 并以这种方式写回 zip;不过,这似乎很危险。
从我的角度来看,如果您不习惯启用 XCMD,最好的解决方案是让 SAS 写出一个包含 zip 指令的批处理文件(我想是 Linux 中的 .sh 文件),并让运行 SAS 的进程执行完成后的那个 .sh 文件。
如果您的输出到 ODS 目标,您可以创建一个 ODS 包并将所有输出包含在 zip 文件中。
ods package open;
ods html package;
proc print data=sashelp.class;
run;
ods html close;
ods package publish archive properties(archive_name="class.zip" archive_path="\");
ods package close;