我必须对大量500个Excel文件的excel文件进行帐户核对。
我不需要按照文件的数量来匹配帐号。
Example file 1: \\directory\Loaded\Jan2014\excel1
Example file 2: \\directory\Loaded\Feb2014\excel2
Example file 3: \\directory\Loaded\Feb2014\excel3
(帐号始终填入B列,第1行至第5行作为标题)
使用以上示例所需的输出:
主文件夹(文件)|子文件夹(Jan2014)|文件名(excel1)|帐号计数
这是否可以使用SAS?
因此,如果这还不够,我已经搜索了网络并找到了使用批处理文件来恢复文件列表的方法,但没有任何重要的信息。
答案 0 :(得分:1)
SAS解决方案是这样的。如果你做了所有的libnames,然后设置了所有的数据集,你可以使这个效率更高一些,但是这个代码更容易一些,而且对于500我觉得它是合理的。不幸的是,excel libnames似乎没有为你做行计数,所以你不能只使用dictionary.tables来做到这一点。
如果工作表名称不同,您需要修改此项以将其考虑在内,或者通过设置一个宏变量来保存工作表名称应该是什么,如果它以某种方式链接到文件名,或者让宏对dictionary.tables进行查询,以查看libname中存在哪些表。
%let basedir=c:\temp; *whatever the base directory is that all of your excel files are upstream from;
filename dirl pipe "dir /b/s &basedir.\*.xlsx";
data libnames;
infile dirl lrecl=1024 pad;
input
@1 filename $1024.;
run;
%macro get_rowcount(file=);
libname _temp excel "&file.";
data _rowcount;
set _temp."Sheet1$"n end=eof;
length file_name $1024;
retain file_name "&file.";
if eof then do;
rowcount=_n_;
output;
end;
keep rowcount file_name;
run;
proc append base=rowcounts data=_rowcount force;
run;
%mend get_rowcount;
proc sql;
select cats('%get_rowcount(file=',filename,')') into :sheetlist separated by ' '
from libnames;
quit;
&sheetlist.;
答案 1 :(得分:0)
我会使用Powershell,除非你真的需要在SAS中这样做。 要将结果发送到SAS,如果需要,您可以将数据从powershell保存到excel文件并将其导入SAS。