SAS统计excel观察值

SAS统计excel观察值,excel,sas,vba,Excel,Sas,Vba,我必须对多个excel文件(大约500个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行) 使用上述示例所需的输出: 主文件夹(

我必须对多个excel文件(大约500个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行)

使用上述示例所需的输出:

主文件夹(文件)|子文件夹(2014年1月)|文件名(excel1)|账号计数

使用SAS是否可以实现这一点


因此,如果这还不够信息,我已经搜索了网络,并找到了使用批处理文件返回文件列表的方法,但没有任何可以计算观察值的方法。

我会使用Powershell进行此操作,除非您确实需要在SAS中执行此操作。 要将结果获取到SAS,如果需要,您可以将数据从powershell保存到excel文件,然后将其导入SAS


请先看一看,例如作为初学者。

SAS解决方案是这样的。如果你做了所有的libname,然后设置了所有的数据集,你可以使这更有效一些,但是这段代码更容易一些,而且对于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.;

我认为,更简单的方法可能是在SAS导入中使用通配符,但为此,我可以获取要导入的文件名吗?您是否可以访问许可的PC文件(即,您可以从excel执行proc导入)?此外,工作表的名称是否始终相同(如SHEET1)或不同?它是可预测的吗?是的,我可以进行proc导入,并且所有文件的名称都不同,这就是为什么我想到使用通配符,但它们也在子目录中。i、 e 2014年1月将有5个excel文件,2014年2月可能有100个excel文件。但是,文件中的工作表是以不同的名称命名的,还是它们都是Sheet1或其他名称?(File/Workbook=a.xlsx File.Sheet=工作簿中的选项卡。)我从未使用过Powershell,查看上面的链接,我每次只能处理一个文件,这在超过500多个文件的情况下是不可能的。熟练的PowerShell用户可以编写脚本,这样它就可以使用类似于我上面的答案的目录列表在所有文件上运行循环。(对不起,我不是这样的用户!)Joe-您能列出这需要的任何模块依赖项吗?感谢这将在Windows桌面环境下工作,可以访问授权的PC文件。在Windows server环境中,如果管理员启用了
XCMD
,此功能可能仍然有效。在非Windows环境中,这一概念仍应可行,但需修改相应系统命令的目录命令(因此,在Linux中,
ls
带有适当的标志),如果是服务器环境,则允许使用
XCMD
,并且需要有PC文件服务器(并将libname修改为使用该方法)。我现在已将所有.xls文件放在一个文件夹中,并使用*.xls作为通配符运行proc导入。虽然这在第一部分中有效,但我还需要将文件名添加到使用proc导入创建的表中。这可能吗?您只需解析该表中的完整路径文件名。您可以通过多种方法执行此操作-使用
SCAN
(提示:
-1
在单词列中的意思是“从右边开始”),使用正则表达式、查找和子字符串,只要你觉得合适。