SAS-读取多个压缩数据文件

时间:2014-01-24 11:16:21

标签: macros sas zipfile

我希望你们都很好。 所以我的问题是关于打开多个压缩的原始数据文件的过程。

我订购了我的文件名,所以我有例如:o_equities_20080528.tas.zip o_equities_20080529.tas.zip o_equities_20080530.tas.zip ...

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

这需要做多少工作取决于:

  • 您有足够的空间将所有文件同时提取到一个文件夹中
  • 您需要能够跟踪每个记录来自哪个文件(即,您只能通过查看特定记录来判断)。

如果你有足够的空间来提取所有内容并且你不需要跟踪哪个记录来自哪个文件,那么最简单的选择是使用通配符infile语句,允许你从所有文件中导入记录一个数据步骤中的文件:

infile "c:\yourdir\o_equities_*.tas" <other infile options as per individual files>;

无论操作系统如何,此语法都有效 - 它是SAS功能,而不是shell扩展。

如果您有足够的空间提前提取所有内容但需要跟踪每个文件中的哪些记录,请参阅此页面以获取如何使用infile语句中的filevar选项执行此操作的示例: http://www.ats.ucla.edu/stat/sas/faq/multi_file_read.htm

如果您没有足够的空间提前提取所有内容,但您可以访问7-zip或其他存档实用程序,并且您不需要跟踪每个文件中的哪些记录,您可以使用管道文件名并提取到标准输出。如果您使用的是Linux平台,那么这很简单,因为您可以利用shell扩展:

filename cmd pipe "nice -n 19 gunzip -c /yourdir/o_equities_*.tas.zip";
infile cmd <other infile options as per individual files>;

在Windows上它有同样的想法,但是由于你不能使用shell扩展,你必须为每个zip文件构建一个单独的文件名,或者使用7zip的一些文件。神秘的命令行选项,例如:

filename cmd pipe "7z.exe e -an -ai!C:\yourdir\o_equities_*.tas.zip -so -y";

这将从所有匹配的归档中提取所有文件到标准输出。如有必要,您可以通过7-zip命令进一步缩小范围。您将有多个标题行与数据混合 - 您可以使用findstr在SAS看到它们之前在管道中过滤掉这些标题行,或者您可以选择在此处和那里容忍奇怪的错误消息。

这里,-an告诉7-zip不要从命令行读取zip文件名,-ai告诉它扩展通配符。

如果您需要跟踪来自哪里的内容而您无法一次性提取所有内容,那么您最好的选择(据我所知)是编写一个宏来一次处理一个文件,使用上述技术并在您导入每个数据集时添加此信息。