Je souhaite lire le premier et le dernier enregistrement d'un grand nombre de fichiers .csv (plusieurs gigaoctets) stockés dans un dossier sur une machine Linux. Supposons qu'ils s'appellent have1.csv, have2.csv, ...
et ainsi de suite.SAS - Lecture de la première et dernière observation de plusieurs fichiers csv
J'ai donc essayé le code suivant, qui ne me donne que la première ligne. Mais pas la dernière ligne.
%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;
J'apprécierais beaucoup votre aide! Si j'ai mal compris le concept ou l'interaction entre infile, fin, eov, eof et input @, dites-moi s'il vous plaît! Je ne sais pas où mon erreur est ...
Etes-vous également en train d'ignorer les lignes d'en-tête? Est-ce cela le commentaire sur FIRSTOBS = option? – Tom
Oui, désolé de ne pas avoir répondu plus tôt. –