SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 10989|回复: 7
打印 上一主题 下一主题

利用SAS获取文件列表的几种方法

[复制链接]

10

主题

39

帖子

1049

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1049
QQ
跳转到指定楼层
楼主
发表于 2014-3-17 19:46:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天跟大家分享一些SAS中用来获取文件列表的一些方法,包括操作系统某个指定文件夹下的文件列表,以及FTP某个文件夹下的文件列表。

  • 获取操作系统文件列表
      1. 通过函数获取
            该种方法使用多个函数来获取文件列表,使用的函数包括:filename、dopen、dnum、dread、dclose。示例如下所示:
  1. %let path=C:\Program Files\SASHome;
  2.   data filelist;
  3.    rc=filename("mydir","&path");
  4.    did=dopen("mydir");
  5.    if did gt 0 then do;
  6.     memcount=dnum(did);
  7.     do i=1 to memcount;
  8.      memname=dread(did,i);
  9.      output;
  10.     end;
  11.    end;
  12.    else put "ERROR: Can't find the path!";
  13.    rc=dclose(did);
  14.    keep memname;
  15.   run;
复制代码

         此种方式可以获取指定文件夹下的文件,以及文件夹列表,结果如下所示:
         


       2. 通过pipe匿名管道获取文件列表
          通过Windows平台下的匿名管道获取文件列表是较为简单的,不需要那么多函数的参与,只需要filename与infile语句即可完成,具体如下所示:
  1. filename loc_in pipe "dir ""&path"" /b";
  2.   data filelist2;
  3.    infile loc_in truncover;
  4.    length name $ 200;
  5.    input name;
  6.   run;
复制代码


            得到的结果与上面一样,获取的列表包括文件夹和文件。
             注意:此处的filename语句当中的引号,宏变量path被双引号引起来,为的是解决路径当中出现空格的问题。

             如果采用这种形式:
  1. 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
      程序如下:
  1. %let ftp_host=mysas.vicp.net;
  2.   %let encoding=utf-8;
  3.   %let cd=;
  4.   %let user=mysasdown;
  5.   %let pass=mysasdown;
  6.   filename ftp_in ftp '' ls host="&ftp_host" cd="&cd" encoding="&encoding" user="&user" pass="&pass";
  7.   data ftplist;
  8.    infile ftp_in truncover;
  9.    length name $ 100;
  10.    input name $;
  11.   run;
复制代码

       结果如下所示:
         
       大家看到了吧,FTP上有相当多的资料。
       另外cd=选项用来指定文件夹,上面程序中为空,表示根目录,现在将其赋值为:
      
  1. %let cd=SAS考证辅导;
复制代码

       重新运行后,得到结果:
         


PS:如果不希望FTP密码在代码中出现,可以使用PROC PWENCODE对密码进行加密处理,如下所示:
  1. proc pwencode in='mysasdown' ;
  2. run;
复制代码

加密后的密文在日志中显示,如下所示:


使用该密文替换pass=参数中的值即可。


OK,今天的分享就到此为止,希望大家有所收获。









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  微信微信
收藏收藏1
回复

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
发表于 2014-3-17 22:05:02 | 只看该作者
非常实用啊!太赞了!
回复 支持 反对

使用道具 举报

6

主题

31

帖子

293

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
293
板凳
发表于 2014-3-17 22:42:46 | 只看该作者
相当给力!相当不错!

简洁明了。

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

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


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



SAS资源
1. SAS 微信:mysasnet
2. SAS QQ群:348941365
3. SAS Blog:编程|统计|医药
回复 支持 反对

使用道具 举报

10

主题

39

帖子

1049

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1049
QQ
地板
 楼主| 发表于 2014-3-23 11:47:41 | 只看该作者
webgu 发表于 2014-3-17 22:42
相当给力!相当不错!

简洁明了。

回复 支持 反对

使用道具 举报

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
5#
发表于 2014-4-3 22:51:41 来自手机 | 只看该作者
为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
发表于 2014-4-3 23:20:38 | 只看该作者
wpfwxn 发表于 2014-4-3 22:51
为啥我感觉ftp上的资料变少了呢,记得去年登陆的时候资料比现在多呀

一直在增多,从未删除过。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

131

积分

注册会员

Rank: 2

积分
131
7#
发表于 2014-4-18 17:32:29 | 只看该作者
相当漂亮、、、赞一个
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
8#
发表于 2014-4-20 21:45:21 | 只看该作者
不错不错,非常好!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2024-4-20 07:53 , Processed in 0.307633 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表