美文网首页
SAS编程:如何批量读入某路径下外部文档数据?

SAS编程:如何批量读入某路径下外部文档数据?

作者: 野藤_ | 来源:发表于2022-06-01 08:31 被阅读0次

    SAS日志文件的Issue检查涉及多个日志文件的导入,导入的过程分为2个部分。第一部分,获取特定路径下所有日志文件的名称(即文件地址);第二部分,获取文件地址后将文件导入SAS数据集

    这两部分功能的实现,之前都有过介绍:

    SAS编程:如何获取某路径下文件的名称?
    SAS编程:如何读入外部文档数据?

    这篇文章将这两部分的内容整合到一起,演示路径如下:

    Directory

    1. 获取路径中文件名称

    程序思路是,使用Dopen函数打开特定路径,通过Dnum函数获取路径内的文件数目,基于此使用Do循环以及Dread函数进行读取文件名称,路径名称与文件名拼接可以获得文件路径。最后,对数据集进行筛选,只保留.LOG文件。

    ***Get filename and folder;
    
    %let dirpath = E:\99_Test\Test\test5;
    
    **Get filepath;
    data _tmp1;
      fileres = filename("dirpath", "&dirpath.");
      dirid = dopen("dirpath");
      num = dnum(dirid);
    
      length direct filename filepath $200;
    
      if dirid > 0 and num >0 then do;
        do i = 1 to num;
          direct = "&dirpath.";
          filename = dread(dirid, i);
          filepath = catx("\", direct, filename);
    
          if upcase(scan(filename, -1, ".")) in ("LOG")  then output; 
        end;
      end;
    
      keep filename filepath;
    
      proc sort;
        by filename;
    run;
    
    

    程序运行结果如下:

    Result

    2. 文档信息导入SAS数据集

    前面文章介绍了2种导入方法,推荐使用infile语句。我手动将保存导入内容的长度设置为1000,这个值已经是比较大了。但是对于一些Log Issue,会将所有变量取值输出到日志中,这时候很容易造成内容截断。

    不过,从检查Issue的角度看,可以在导入时筛选特定记录进行输出,截断不影响检查的判断结果。当然,也可以设置SAS读入文档的记录的最大长度32767,这大概率会避免内容的截断。

    data _tmp2;
        set _tmp1;
        infile dummy  filevar=filepath end=lastrec truncover;
    
        do while(not lastrec);
            input text $1000.;
            output;
        end;
    run;
    

    结果如下:

    Result 1 Result 2

    总结

    批量读入外部文档,是单个文档读入的延伸。文档读入SAS数据集,方便后续的检查处理。

    感谢阅读, 欢迎关注!
    若有疑问,欢迎评论交流!

    相关文章

      网友评论

          本文标题:SAS编程:如何批量读入某路径下外部文档数据?

          本文链接:https://www.haomeiwen.com/subject/tviaprtx.html