sas - 从 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 选项?
这里还有什么问题?欢迎任何建议!
解决方案
SAS 现在支持直接读取 ZIP 文件。尝试这样的事情:
filename in zip "C:\data\stuff\weather\data\extracted.zip"
member="&usaf.-&wban.-&year."
lrecl=3000
;
推荐阅读
- php - PHP array_intersect_key 但保留来自 array2 的值
- python - 具有不同类型值的字典的假设搜索策略
- ios - Swift - 按下按钮后从 TableView 中删除单元格
- reactjs - 显示对话框后 React onClick 停止工作
- mongodb - 关于MongoDB跨数据库连接的一些问题
- python - 在数据框中搜索值的邻居
- docker - 列出容器时如何在命令列中看到完整的命令字符串?
- python - urllib3.Pool Manager 没有属性名
- python-3.x - 对象通过类型函数时的Mypy行为?
- testing - WithClauseError, elixir 单元测试匹配 (:ok, value}