首页 文章

从SAS宏调用7zip

提问于
浏览
0

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:\ data \ stuff \ weather \ data \ extracted.zip \ extracted \ && usaf - && wban - && year \”“ - so”lrecl = 3000;跑; %结束;

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

MLOGIC(LOOPS):%DO循环开始;索引变量YEAR;起始 Value 是2011年;停止 Value 是2014年;按值为1. SYMBOLGEN:宏变量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(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:\ data \ stuff \ weather \ data \ extracted.zip \ extracted \ 702120-26646-2011系统错误:系统找不到指定的路径 .

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

令我困惑的是文件存在或完全按照已解析路径的指定驻留在文件夹中 .

7zup调用中是否存在错误,导致无法找到该文件?例如,应该使用除“-so”之外的7zip选项吗?

还有什么可能出错?欢迎任何建议!

1 回答

  • 1

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

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

相关问题