以下是DATA SET步骤的幌子。 我在一个以公共前缀开头的目录中获取文件。
为了这个调试程序,假设前缀是'test'。
所以我们得到了像test_abc.txt,test_123.txt等文件。
我们想要做的是提取每个文件的最后修改时间。 由于我在Unix系统下,我使用以下“foo pipe'ls -o -g --full-time ...'”来获取我们感兴趣的时间。
在work.tempo中,我希望得到一个包含文件名列表(vname)和相应修改日期(mod_datec)的表。
Voilàlesouci,je vous remercie!
%macro universe(directory, countryname, prefix);
data work.tempo;
length vname $256.;
rc = dopen(&directory);
vmax = dnum(rc);
select("&countryname");
when ("France")
do;
do i = 1 to vmax;
vname = dread(rc,i);
if vname=:"&prefix."
then do;
filename foo pipe "ls -g -o --full-time ~/&prefix.*";
data _null_;
infile foo;
input @15 mod_date $11.;
if mod_date=" " then stop;
mod_datec = scan(mod_date,1,"-")
||scan(mod_date,2,"-")
||scan(mod_date,3,"-");
put mod_datec= ;
run;
/*I want to output mod_datec to work.tempo from here*/
end;
end;
end;
otherwise;
end;
rc = dclose(rc);
run;
%mend;
%universe(Earth, France, test);
答案 0 :(得分:1)
我已经复制了OP的答案(错误地嵌入了问题中):
我已经解决了这个问题。以下是代码
%macro universe(); filename foo pipe "ls -g -o -G -l --full-time test* | awk '{print $4, $5, $7}'"; data mod_date (keep = vname vdate); infile foo; input @1 mod_date $10. @12 heures $8. @92 vname $18.; mod_datec = scan(mod_date,1,"-") ||scan(mod_date,2,"-") ||scan(mod_date,3,"-"); heuresc = scan(heures,1,":") ||scan(heures,2,":") ||scan(heures,3,":"); vdate = strip(mod_datec)||strip(heuresc); run; %mend universe; %universe();
Voilà,我终于要提取文件名和相应的最后修改日期。我希望它对其他任何人都有用