Corrected data step:
data want;
set files;
/* move global statements out of the loop, for better code readability */
length
ACCOUNT_NUMBER $32.
;
/* use LENGTH to define character variables, not FORMAT or INFORMAT */
informat
FACILITY_CREATION_DATE anydtdtm40.
;
format
FACILITY_CREATION_DATE datetime.
;
infile dummy filevar=fname end=done delimiter = ',' truncover dsd termstr=CRLF firstobs=2;
/* firstobs is an option of the INFILE statement */
do while (not done);
input
ACCOUNT_NUMBER
FACILITY_CREATION_DATE
;
if _ERROR_ then call symputx('_EFIERR_',1); /* set ERROR detection macro variable */
output; /* or you'll only get the last observation of each file! */
end;
run;
Complete example, tested on SAS On Demand:
data _null_;
set sashelp.class;
file "~/class1.csv" dlm=",";
if _n_ = 1 then put "name,sex";
put name sex;
run;
data _null_;
set sashelp.class;
file "~/class2.csv" dlm=",";
if _n_ = 1 then put "name,sex";
put name sex;
run;
%let inpath=~;
data files;
length
dref $8
fname $200
;
rc = filename(dref,"&inpath.");
did = dopen(dref);
if did
then do;
do i = 1 to dnum(did);
fname = dread(did,i);
if scan(fname,-1,".") = "csv" and substr(fname,1,5) = "class"
then do;
fname = catx("/","&inpath.",fname);
output;
end;
end;
rc = dclose(did);
end;
rc = filename(dref);
keep fname;
run;
data want;
set files;
infile dummy filevar=fname end=done dlm="," firstobs=2;
do while (not done);
input name :$8. sex :$1.;
output;
end;
run;
Note the different separator (forward slash instead of backslash) used in the filename because of UNIX. Otherwise that same code will work in your SAS.
... View more