Linuxマシンの1つのフォルダに膨大な数の.csvファイル(数ギガバイト)の最初と最後のレコードを読みたい。それらがhave1.csv, have2.csv, ...
と呼ばれているとします。SAS - 複数のcsvファイルの最初と最後の観察を読む
私は次のコードを試しました。私は最初の行だけを与えてくれました。しかし、最後の行ではありません。
%let datapath = ~/somefolder/;
data want;
length finame $300.;
/*Reference all CSV files in input data folder*/
infile "&datapath.have*.csv" delimiter=","
MISSOVER DSD lrecl=32767 firstobs=2
eov=eov eof=eof filename=finame end=done;
/*Define input format of variables*/
informat Var1 COMMA. Var2 COMMA. Var3 COMMA.;
/*Loop over files*/
do while(not done);
/*Set trailing @ to hold the input open for the next input statement
this is because we have several files */
input @;
/*If first line in file is encountered eov is set to 1,
however, we have firstobs=2, hence all lines would be skipped.
So we need to reset EOV to 0.*/
if eov then
do;
/*Additional empty input statement
handles missing value at first loop*/
input;
eov = 2;
end;
/*First observation*/
if eov=2 then do;
input Var1--Var3;
fname=finame;
output;
eov = 0;
end;
/*Last observation*/
if 0 then do;
eof: input Var1--Var3;
fname=finame;
output;
end;
input;
end;
stop;
run;
ご協力いただきありがとうございます。 infile、end、eov、eof、input @のコンセプトや相互作用を誤解している場合は教えてください!私の間違いがある場合、私はこれが私のために動作するようです...
ヘッダー行もスキップしますか? FIRSTOBS =オプションに関するコメントは何ですか? – Tom
はい、以前に書き返していないのは申し訳ありません。 –