SAS是我这个项目的主要软件。我正在使用SAS拨打7zip。 SAS和7zip都是64位版本。目标是读取压缩的美国NOAA气象站数据4年 - 大约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宏语法:
%年份= 2011年至2014年;
管道中的文件名“c:/7-zip/7z.exe x
“” C:\数据\东西\天气\数据\ extracted.zip \萃取\&安培;&安培; usaf-&安培;&安培; wban-&安培;&安培;年\ “” - 所以“lrecl = 3000;
运行;
%端;
这里解析了1个文件的代码:
MLOGIC(LOOPS):%DO循环开始;索引变量YEAR;开始值 是2011年;停止价值是2014年;按值是1.
SYMBOLGEN:宏变量USAF解析为702120
SYMBOLGEN:宏变量WBAN解析为26646
SYMBOLGEN:宏变量YEAR解析为2011
MPRINT(LOOPS):管道中的文件名“c:/7-zip/7z.exe x “” C:\数据\东西\天气\数据\ extracted.zip \萃取\ 702120-26646-2011 \ “” - 所以“lrecl = 3000;
MPRINT(LOOPS):跑步;
注意: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
Stderr输出:
错误:系统找不到指定的路径。
C:\数据\东西\天气\数据\ extracted.zip \萃取\ 702120-26646-2011
系统错误:
系统找不到指定的路径。
显然语法没有错误,但SAS无法找到该文件。
让我感到困惑的是该文件完全按照已解析路径的指定存在或驻留在文件夹中。
7zup调用中是否存在错误,导致无法找到该文件?例如,应该使用除“-so”之外的7zip选项吗?
这里还有什么问题?欢迎任何建议!
答案 0 :(得分:1)
SAS现在支持直接读取ZIP文件。尝试这样的事情:
filename in zip "C:\data\stuff\weather\data\extracted.zip"
member="&usaf.-&wban.-&year."
lrecl=3000
;