如何使用SAS宏加载选定的文件列表

时间:2016-03-21 16:10:19

标签: sas

我有一个装满csv文件的文件夹(文件夹路径Path)。我有一个SAS数据集Name,其中包含所选文件名列表。数据集Name如下所示:

FileName
File1
File3
File8
File9
...

我想加载数据集namename1-name...)上列出的每个文件,并使用相同的名称将其另存为sas数据集。

任何人都可以教我如何使用宏自动化这个过程。我无法弄清楚如何创建循环并逐个执行以下过程。非常感谢。

data Name1   ;
     infile 'Path\Name1.csv' delimiter = ','  truncover DSD lrecl=32767 firstobs=2 ;
         informat VAR1 $25. ;
         informat VAR2 yymmdd10. ;
         informat VAR3 best12.  ;

         format VAR1 $25. ;
         format VAR2 yymmdd10. ;
         format VAR3 best12.  ;

         input
                  VAR1 $
                  var2
                  var3
      ;
run; 

1 个答案:

答案 0 :(得分:1)

  1. 创建为一个文件正确导入的代码(您已在上面提供)。
  2. 更改代码以获取宏变量而不是默认值。

    %let name=name1;
    
    data &name;
    infile "Path\&name..csv" delimiter = ','  truncover DSD lrecl=32767 firstobs=2 ;
    informat VAR1 $25. VAR2 yymmdd10. VAR3 best12.  ;
    format VAR1 $25.  VAR2 yymmdd10.  VAR3 best12.  ;
    
    input VAR1 $ var2 var3;
    run; 
    
  3. 创建一个带参数的宏

    %macro import_file(name);
    data &name;
    infile "Path\&name..csv" delimiter = ','  truncover DSD lrecl=32767 firstobs=2 ;
    informat VAR1 $25. VAR2 yymmdd10. VAR3 best12.  ;
    format VAR1 $25.  VAR2 yymmdd10.  VAR3 best12.  ;
    
    input VAR1 $ var2 var3;
    run;
    %mend; 
    
  4. 在数据集中使用call execute来执行宏。

    data _null_;
    set files;
    str=catt('%import_file(', file_name, ');');
    call execute(str);
    run;