利用SAS获取文件列表的几种方法
今天跟大家分享一些SAS中用来获取文件列表的一些方法,包括操作系统某个指定文件夹下的文件列表,以及FTP某个文件夹下的文件列表。[*]获取操作系统文件列表
1. 通过函数获取
该种方法使用多个函数来获取文件列表,使用的函数包括:filename、dopen、dnum、dread、dclose。示例如下所示:
%let path=C:\Program Files\SASHome;
data filelist;
rc=filename("mydir","&path");
did=dopen("mydir");
if did gt 0 then do;
memcount=dnum(did);
do i=1 to memcount;
memname=dread(did,i);
output;
end;
end;
else put "ERROR: Can't find the path!";
rc=dclose(did);
keep memname;
run;
此种方式可以获取指定文件夹下的文件,以及文件夹列表,结果如下所示:
2. 通过pipe匿名管道获取文件列表
通过Windows平台下的匿名管道获取文件列表是较为简单的,不需要那么多函数的参与,只需要filename与infile语句即可完成,具体如下所示:
filename loc_in pipe "dir ""&path"" /b";
data filelist2;
infile loc_in truncover;
length name $ 200;
input name;
run;
得到的结果与上面一样,获取的列表包括文件夹和文件。
注意:此处的filename语句当中的引号,宏变量path被双引号引起来,为的是解决路径当中出现空格的问题。
如果采用这种形式:filename loc_in pipe "dir &path /b";
若路径中没有空格,则会正常获取到列表;若路径中有空格,则会出现以下错误:
由于路径中有空格,操作系统会寻找C:\Program这个文件夹,实际上这个文件夹是不存在的,因此会报错。
[*]获取FTP文件列表
获取FTP目录的文件列表也是通过filename与infile语句来实现的,具体如下所示:
我们以SAS中文论坛的FTP为例进行演示。SAS中文论坛FTP的地址是:mysas.vicp.net;上面有很多资料,大家可以去看看,也欢迎大家将资料上传
进行共享。
关于FTP的详细信息,请参见:SAS中文论坛FTP站 http://www.mysas.net/forum/forum.php?mod=viewthread&tid=2797&fromuid=9
程序如下:
%let ftp_host=mysas.vicp.net;
%let encoding=utf-8;
%let cd=;
%let user=mysasdown;
%let pass=mysasdown;
filename ftp_in ftp '' ls host="&ftp_host" cd="&cd" encoding="&encoding" user="&user" pass="&pass";
data ftplist;
infile ftp_in truncover;
length name $ 100;
input name $;
run;
结果如下所示:
大家看到了吧,FTP上有相当多的资料。
另外cd=选项用来指定文件夹,上面程序中为空,表示根目录,现在将其赋值为:
%let cd=SAS考证辅导;
重新运行后,得到结果:
PS:如果不希望FTP密码在代码中出现,可以使用PROC PWENCODE对密码进行加密处理,如下所示:
proc pwencode in='mysasdown' ;
run;
加密后的密文在日志中显示,如下所示:
使用该密文替换pass=参数中的值即可。
OK,今天的分享就到此为止,希望大家有所收获。
非常实用啊!太赞了! 相当给力!相当不错!
简洁明了。
我曾基于这个写过一个应用: 批量导入EXCEL到SAS,用的就是这几种方法。
http://blog.sina.com.cn/s/blog_41889b900101spcv.html
此外,还有一种,那就是用DOS命令结合X语句。
webgu 发表于 2014-3-17 22:42
相当给力!相当不错!
简洁明了。
:handshake 为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀 wpfwxn 发表于 2014-4-3 22:51
为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀
一直在增多,从未删除过。 相当漂亮、、、赞一个 不错不错,非常好!
页:
[1]