Ich möchte den ersten und letzten Datensatz einer großen Anzahl von .csv-Dateien (mehrere Gigabyte) in einem Ordner auf einem Linux-Rechner gespeichert lesen. Angenommen, sie heißen have1.csv, have2.csv, ...
und so weiter.SAS - Erste und letzte Beobachtung von mehreren CSV-Dateien lesen
Also habe ich den folgenden Code ausprobiert, der mir nur die erste Zeile gibt. Aber nicht die letzte Zeile.
%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;
Ich würde Ihre Hilfe sehr schätzen! Wenn ich das Konzept oder das Zusammenspiel von infile, end, eov, eof und input @ missverstanden habe, bitte sag es mir! Ich weiß nicht, wo mein Fehler ist ...
Versuchen Sie auch Kopfzeilen zu überspringen? Ist das der Kommentar zu FIRSTOBS = Option? – Tom
Ja, tut mir leid, dass ich nicht früher zurückgeschrieben habe. –