首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SAS中导入多个.dbf文件

问如何在SAS中导入多个.dbf文件
EN

Stack Overflow用户
提问于 2016-11-13 15:44:20
回答 2查看 1K关注 0票数 0
代码语言:javascript
复制
%let dirname = C:\Users\data;
 filename DIRLIST pipe 'dir/B &dirname\*.dbf';

 /* Create a data set with one observation for each file name */
 data dirlist;
     length fname $8.; 
     infile dirlist length=reclen;
     input fname $8.;
 run;

 data all_text (drop=fname);
 set dirlist;
 filepath = "&dirname\"||fname||".dbf";
 infile dummy filevar = filepath length=reclen end=done missover;
 do while(not done);    
 INPUT
 F1               : 2.
 F2              : 2.
 F3               : 2.
 F4               : 10.
 F5               : 4.;
 output;        
 end;    
 run;

问题是,它只是读取每个文件的第一行,而不是在移到下一个文件之前读取整个文件。变量F1也显示为“缺失”。

欢迎提出建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-14 00:27:45

因此,一个标准的proc导入应该是:

代码语言:javascript
复制
 proc import out=sample1 datafile="path to dbf file.dbf" dbms=DBF replace; 
 run;

现在的问题是如何为文件列表中的每个文件生成这组代码。使用@Tom的CALL EXECUTE语句是最好的选择。您还可以调用创建一个小宏,并使用call EXECUTE为每个文件名调用它。如果你是SAS新手,这可能更容易理解。

代码语言:javascript
复制
*Create a macro that imports the DBF

%macro import_dbf(input= , output=);

  proc import out=&out datafile="&output" dbms=DBF replace; 
 run;

%mend;

然后从dataset调用宏。我将数据集命名为DBF001、DBF0002等。

代码语言:javascript
复制
%let dirname=C:\_localdata;

data dirlist;
    informat fname $20.;
    input fname;
    cards;
    data1.dbf
    data2.dbf
    data3.dbf
    data4.dbf
    ;
run;

data out;
    set dirlist;
    str=catt('%import_dbf(input="', "&dirname", '\', fname, '", output=dbf', 
        put(_n_, z4.), ');');
run;

proc print data=out;
run;
票数 1
EN

Stack Overflow用户

发布于 2016-11-13 21:52:07

一个接一个地导入它们,然后将它们组合起来。

代码语言:javascript
复制
%let dirname = C:\Users\data; 
data filelist ;
  infile "dir /b &dirname\*.dbf" pipe truncover end=eof;
  fileno + 1;  
  input fname $256. ;
  tempname = 'temp'||put(fileno,z4.);
  call execute(catx(' ','proc import replace dbms=dbf'
       ,'out=',tempname,'datafile=',quote(trim(fname)),';run;'
  ));
  if eof then call symputx('lastname',tempname);
run;
data want ;
  set temp0001-&lastname;
run;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40575667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档