slash 发表于 2014-3-17 19:46:43

利用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,今天的分享就到此为止,希望大家有所收获。









shiyiming 发表于 2014-3-17 22:05:02

非常实用啊!太赞了!

webgu 发表于 2014-3-17 22:42:46

相当给力!相当不错!

简洁明了。

我曾基于这个写过一个应用: 批量导入EXCEL到SAS,用的就是这几种方法。

http://blog.sina.com.cn/s/blog_41889b900101spcv.html


此外,还有一种,那就是用DOS命令结合X语句。



slash 发表于 2014-3-23 11:47:41

webgu 发表于 2014-3-17 22:42
相当给力!相当不错!

简洁明了。


:handshake

wpfwxn 发表于 2014-4-3 22:51:41

为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀

shiyiming 发表于 2014-4-3 23:20:38

wpfwxn 发表于 2014-4-3 22:51
为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀

一直在增多,从未删除过。

愤怒的老鸟 发表于 2014-4-18 17:32:29

相当漂亮、、、赞一个

younglx 发表于 2014-4-20 21:45:21

不错不错,非常好!
页: [1]
查看完整版本: 利用SAS获取文件列表的几种方法