首页 > 解决方案 > 从 SAS 宏调用 7zip

问题描述

SAS 是我这个项目的主要软件。我正在使用 SAS 调用 7zip。SAS 和 7zip 都是 64 位版本。目标是读取 4 年的压缩美国 NOAA 气象站数据——大约 4,000 个站,因此大约 16,000 个文件。

每个文件包含多个可变长度、不定界的记录,每个记录包含给定站点的日期、时间和天气信息(例如,温度、能见度、降水等)。这个问题与阅读记录无关。这是关于读取文件的。

这些文件不使用任何类型的扩展名存储,例如,没有 *.txt、*.dat、*.gz、*.tar。在它们的命名中没有使用任何定义文件类型的内容。我通过在 Windows 文件资源管理器中打开和关闭“文件扩展名”选项来检查这一点。其他信息显示文件扩展名,但 NOAA 文件不显示文件扩展名。每个文件名有 3 个字段。前两个字段定义了一个唯一的 NOAA 气象站(分别为 USAF 和 WBAN),最后一个字段是年份。以下是一些有代表性的文件名:

702120-26646-2011

702120-26646-2012

702120-26646-2013

等等

由于文件是压缩的,我使用 7zip 通过来自 SAS 的宏调用来解压缩它们。以下是这些调用的 SAS 宏语法:

%do 年份=2011 % 到 2014 年;

管道中的文件名“c:/7-zip/7z.exe x

""C:\data\stuff\weather\data\extracted.zip\extracted\&&usaf-&&wban-&&year\"" -so" lrecl=3000;

跑;

%结尾;

这里是 1 个文件的解析代码:

MLOGIC(LOOPS): %DO 循环开始;索引变量 YEAR;起始值为 2011;停止值为 2014;按值是 1。

符号:宏变量 USAF 解析为 702120

SYMBOLGEN:宏变量 WBAN 解析为 26646

SYMBOLGEN:宏变量 YEAR 解析为 2011

MPRINT(LOOPS): 管道中的文件名 "c:/7-zip/7z.exe x ""C:\data\stuff\weather\data\extracted.zip\extracted\702120-26646-2011\"" -so" lrecl=3000;

MPRINT(循环):运行;

注意:infile IN 是:

未命名的管道接入设备,

PROCESS=c:/7-zip/7z.exe x

"C:\data\stuff\weather\data\extracted.zip\extracted\702120-26646-2011\" -so, RECFM=V,LRECL=3000

标准错误输出:

错误:系统找不到指定的路径。

C:\data\stuff\weather\data\extracted.zip\extracted\702120-26646-2011

系统错误:

该系统找不到指定的路径。

显然语法没有错误,但 SAS 找不到该文件。

让我感到困惑的是,文件存在或驻留在文件夹中,完全符合解析路径的指定。

7zup 调用中是否有错误导致找不到文件?例如,是否应该使用“-so”以外的 7zip 选项?

这里还有什么问题?欢迎任何建议!

标签: sas7zip

解决方案


SAS 现在支持直接读取 ZIP 文件。尝试这样的事情:

filename in zip "C:\data\stuff\weather\data\extracted.zip"
   member="&usaf.-&wban.-&year." 
   lrecl=3000
;

推荐阅读