SAS计算excel观察结果

时间:2014-04-10 12:22:25

标签: excel excel-vba sas vba

我必须对大量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?

因此,如果这还不够,我已经搜索了网络并找到了使用批处理文件来恢复文件列表的方法,但没有任何重要的信息。

2 个答案:

答案 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。

看看例如Get the Number of Rows in Column of a worksheet作为首发。