前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS获取某目录下某种类型文件最后修改时间

SAS获取某目录下某种类型文件最后修改时间

作者头像
专业余码农
发布2020-07-16 09:48:05
1.6K1
发布2020-07-16 09:48:05
举报
文章被收录于专栏:老Z的博客老Z的博客

今天介绍一下用FILENAME PIPE来获取某一目录下某种类型文件的最后修改时间。比如要获取程序所在目录下SAS数据集的最后修改时间,代码如下:

代码语言:javascript
复制
filename fdate pipe "ls -t ./*.sas7bdat | head -1";

data _null_;
    infile fdate lrecl=32767;
    input;
    call symputx('filename', _INFILE_, 'L');
run;

filename fdate "&filename";

proc sql noprint;
    select cats(put(MODATE, is8601dt.)) into :file_dt
        from dictionary.extfiles
        where FILEREF='FDATE'
        ;
quit;

filename fdate clear;

其中的-t是指按修改时间来排序(倒序);head -1指只输出输入结果的第一行。这个命令还可以用来获取某目录下某种类型文件的最新版本的文件名,宏程序如下:

代码语言:javascript
复制
%macro getfname(keyword=, type=);
filename fname pipe "ls -t ./*.&type | grep -i '&keyword' | head -1";

data _null_;
    infile fname lrecl=32767;
    input;
    _INFILE_=prxchange("s/(.+)\/(.+)(\.&type)/\2/", -1, _INFILE_);
    call symputx("fname", _INFILE_, "g");
run;

/* Close the pipe */
filename fname clear;
%mend getfname;

/*Using Example*/
%getfname(keyword=mapping specifications, type=xlsx)

顺便介绍一下如何获取某种类型文件所在的目录。方法如下:在上级目录通过find命令查找所有目标类型文件,然后再提取文件的目录。以获取文件define.xml的目录为例,实现代码如下:

代码语言:javascript
复制
x 'cd /projects/study123456/';
filename fpath pipe "find . -name '*define*.xml' | head -1 | sed 's#.##'";

data _null_;
    infile fpath lrecl=32767;
    input;
    call symputx('path', prxchange("s#(.+)/(.+?)$#/projects/study123456/\1/#", -1, cats(_INFILE_)));
run;

filename fpath clear;

其中-name表示使用文件名模式来匹配文件;s#.##表示将当前目录的点替换为空。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档