用SAS解析文件名
我有一个目录,其中每周都会创建一个新文件。名称如下:用SAS解析文件名,sas,Sas,我有一个目录,其中每周都会创建一个新文件。名称如下: file_w1.csv file_w2.csv file_w3.csv 我需要做的是根据修改的日期提取最新的文件,然后解析文件扩展名前的2个字符。 因此,在本例中,我希望使用“w3”,因为我想使用它来知道我将在哪一周进行报告 如何在SAS中做到这一点?一种独立于操作系统的技术将使用SAS外部文件功能(如dopen、fopen和finfo)来获取有关文件夹及其项目的信息 考虑以下示例代码,该代码在Windows计算机上解析C:\Temp时对可
file_w1.csv
file_w2.csv
file_w3.csv
我需要做的是根据修改的日期提取最新的文件,然后解析文件扩展名前的2个字符。
因此,在本例中,我希望使用“w3”,因为我想使用它来知道我将在哪一周进行报告
如何在SAS中做到这一点?一种独立于操作系统的技术将使用SAS外部文件功能(如dopen、fopen和finfo)来获取有关文件夹及其项目的信息 考虑以下示例代码,该代码在Windows计算机上解析C:\Temp时对可用信息进行“完全转储”:
data _null_;
length dfileref fileref $8 folder $200;
rc = filename (dfileref, 'C:\Temp');
did = dopen(dfileref);
if did then do;
do index = 1 to doptnum(did);
featurename = doptname(did,index);
featurevalue = dinfo(did,featurename);
put index= featurename= featurevalue=;
if featurename = 'Directory' then folder = featurevalue;
end;
do dindex = 1 to dnum(did);
entryname = dread(did,dindex);
put dindex= entryname=;
rc = filename(fileref, cats(folder, '/', entryname));
fid = fopen (fileref); * if entry is another folder fid will be 0;
if fid then do;
do findex = 1 to foptnum(fid);
featurename = foptname(fid, findex);
featurevalue = finfo(fid, featurename);
put +2 findex= featurename= featurevalue=;
end;
fid = fclose(fid);
end;
rc = filename(fileref);
end;
did = dclose(did);
end;
rc = filename (dfileref);
run;
检查日志后,您可以缩减将特定的所需信息收集到数据集中所需的代码。然后,您可以使用SQL查询进一步处理数据:
data csv_files(keep=fullname lastmod where=(fullname like '%.csv'));
length dfileref fileref $8 folder $200;
folder = 'C:\Temp';
rc = filename (dfileref, folder);
did = dopen(dfileref);
if did then do;
do dindex = 1 to dnum(did);
entryname = dread(did,dindex);
rc = filename(fileref, cats(folder, '/', entryname));
fid = fopen (fileref);
if fid then do;
fullname = finfo(fid,'Filename');
lastmod = input(finfo(fid,'Last Modified'), datetime18.); format lastmod datetime18.;
output;
fid = fclose(fid);
end;
rc = filename(fileref);
end;
did = dclose(did);
end;
rc = filename (dfileref);
run;
proc sql;
create table csv_newest as
select *, scan(scan(fullname,-1,'_'),1,'.') as tag
from csv_files
where prxmatch ('/_.+\.csv$/', fullname)
having lastmod = max(lastmod)
;
读取文件列表,找到最新的文件,导入它。具体方式取决于您未指定的操作系统。请记住展示你所尝试的