使用SAS中的infile语句在带有通配符的csv文件中读取时限制观察值

时间:2018-01-31 22:51:21

标签: csv file-io sas

我正在读取给定目录中的所有CSV文件。我需要将观察限制在第4和第128记录之间。当我使用firstobs和obs选项限制观察数时,它同时适用于所有文件,将我的数据限制在读入的第一个文件中,因为它们都有超过200条记录。

如何使用此流程限制从EACH CSV文件读入的记录数?

以下代码:

data mydata;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
length FNAME $175.; 
infile 'M:\Load Forecasts\Woods & Poole Download_Files_2017\SP_2017_MT_WY\WPGEO\MT Counties\*.csv'
    delimiter = ',' MISSOVER DSD lrecl=32767 filename=fname /*firstobs=4 obs=128*/;
length desc $100;
input desc $  Y1969-Y2050 $;
if _ERROR_ then call symputx('_EFIERR_',1);
filename=fname;
run;

proc print data= mydata (obs=10); run;

csv file read

1 个答案:

答案 0 :(得分:2)

使用filename=选项使当前打开的文件名可用。当文件名与滞后不同时,您将从下一个文件中读取。维护自己的行计数器并根据它进行过滤。

data _null_;
  do i = 1 to 10;
    outfile =  cats('f',put(i,z2.),'.txt');
    file out filevar=outfile;
    do row = 1 to 10;
      z = i/100;
      put z @;
      do j = 1 to 10; 
        put ',' j @;
      end;
      put;
    end;
  end;
run;

data want;
  length filename source $200 rownumber 8;
  infile '*.txt' dlm=',' filename=filename;
  input z v1-v10;

  source = filename;

  if filename ne lag(filename) 
    then rownumber=1; 
    else rownumber+1;

  if 4 < rownumber < 9;
run;