我正在读取给定目录中的所有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;
答案 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;