(sas)连接来自不同文件夹的多个文件
我是一个相对较新的SAS用户,请耐心等待!(sas)连接来自不同文件夹的多个文件
我有63个文件夹,每个文件夹都包含一个唯一命名的xls文件,所有文件都包含相同顺序的相同变量。我需要将它们连接成一个文件。我会发布一些我尝试过的代码,但是,相信我,这一切都变得可怕,完全没用。下面是基本库结构在LIBNAME语句,虽然:
`libname JC 'W:\JCs\JC Analyses 2016-2017\JC Data 2016-2017\2 - Received from JCs\&jcname.\2016_&jcname..xls`
(有63个独特的& jcname值)
任何想法?
在此先感谢!
这是一个常见的需求,但它需要多个SAS功能相当罕见的知识来执行。
我想用两个步骤解决处理这个问题:
- 获取文件名列表
- 方法在回路
每个文件名虽然您可以处理每个文件名作为你阅读它,调试和维护分离这些步骤的代码会容易得多。
第1步:阅读文件名
我想获得的文件名列表的最佳方法是使用dread()
阅读 目录条目到DataSet如下:
filename myfiles 'c:\myfolder';
data filenames (keep=filename);
dir = dopen('myfiles');
do file = 1 to dnum(dir);
filename = dread(dir,file);
output;
end;
rc = dclose(dir);
run;
在此之后步骤,您可以验证是否正在读取正确的文件名正在打印数据集。您也可以修改代码以仅输出某些类型的文件。我将这作为练习给读者。
第2步:使用文件
鉴于数据集的名称列表,我更喜欢使用call execute()
数据步内来处理每个文件。
data _null_;
set filenames;
call execute('%import('||filename||')');
run;
我还没有包括宏在Excel文件读取并连接所有的数据集(部分原因是因为我没有的Excel文件合适的列表进行测试,而且还因为它是一个情景题)。下面只是存根宏输出文件名到日志,以验证它的运行:
%macro import(filename);
/* This is a dummy macro. Here is where you would do something with the file */
%put &filename;
%mend;
注:
可以说有很多是如何做到这一点在对多个地方的例子很多网页,例如:
- 这个SAS知识库文章(http://support.sas.com/kb/41/880.html)
- 或SUGI this paper,
然而,大多依赖于使用的pipe
运行dir
或ls
命令,我感觉是错误的方法,因为它依赖于平台,并且在许多现代环境中,管道shell命令的功能将被禁用。
我基于Daniel Santos在communities.sas.com的回答,但是,考虑到stackoverflow的优越功能,我宁愿在这里看到一个好的答案。
来自宏文档的示例1&2应该足够了。 https://communities.sas.com/t5/SAS-Communities-Library/SAS-9-4-Macro-Language-Reference-Has-a-New-Appendix/ta-p/291716 – Reeza
您的问题不符合SO指导原则,请显示您到目前为止所尝试的内容。 https://stackoverflow.com/help/how-to-ask – Reeza
你有代码工作(或企图)导入一个Excel文件?如果是这样,那就证明。你有没有试过一个宏,它会把&jcname作为参数并读入一个excel文件中?如果是这样,那就证明。一旦你有了这些,就不必再让这个宏循环遍历63个名字的列表。显示你的代码将帮助其他人帮助你。 – Quentin
尽管我同意上述评论,尽管这是一个广泛的问题,但我认为答案仍然有用。在这个网站上似乎没有任何好的答案,并且类似问题的搜索结果出现了一些粗略的答案。这不是SAS中的日常问题,即使对于开始SAS程序员来说,基本方法也不熟悉。它仍然让我停下来思考。 – david25272