I'm trying to read multiple files into a dataset but I'm struggling to find the "best" way to do this. I know that you can't use macro variables inside a datalines statement but I want to be able to specify the directory from which I am reading at the top. This example illustrated what I am trying to do. Can anyone suggest how I might do this?
%Let srcdir=c:\foo;
%Let basename=bar;
Data One;
Infile Datalines;
Length EggFile $152;
Input EggFile $;
Infile dummy FileVar=EggFile end=done;
Do While(not done);
Input this 1-2 that 4;
Output;
End;
Datalines;
"&srcdir\&basename.27.Dat"
"&srcdir\&basename.28.Dat"
"&srcdir\&basename.29.Dat"
"&srcdir\&basename.30.Dat"
"&srcdir\&basename.31.Dat"
"&srcdir\&basename.32.Dat"
"&srcdir\&basename.33.Dat"
"&srcdir\&basename.34.Dat"
Run;
If this is a specific list of files, why not take them out of the DATALINEs statement and put them in a FILENAME statement? Something like:
filename mylist ("&srcdir\&basename.27.Dat","&srcdir\&basename.28.Dat"
,"&srcdir\&basename.29.Dat","&srcdir\&basename.30.Dat"
,"&srcdir\&basename.31.Dat","&srcdir\&basename.32.Dat"
,"&srcdir\&basename.33.Dat","&srcdir\&basename.34.Dat");
data want;
infile mylist;
input this 1-2 that 4;
run;
If this is a specific list of files, why not take them out of the DATALINEs statement and put them in a FILENAME statement? Something like:
filename mylist ("&srcdir\&basename.27.Dat","&srcdir\&basename.28.Dat"
,"&srcdir\&basename.29.Dat","&srcdir\&basename.30.Dat"
,"&srcdir\&basename.31.Dat","&srcdir\&basename.32.Dat"
,"&srcdir\&basename.33.Dat","&srcdir\&basename.34.Dat");
data want;
infile mylist;
input this 1-2 that 4;
run;
If you want to read all of the DAT files in one directory
filename mylist "&srcdir.\*.dat";
You don't need to put macro into DATALINES actually.
%Let srcdir=c:\foo;
%Let basename=bar;
Data One;
Infile Datalines;
Length EggFile $152;
Input EggFile $;
EggFile="&srcdir"||"\"||"&basename"||EggFile ;
Infile dummy FileVar=EggFile end=done;
Do While(not done);
Input this 1-2 that 4;
Output;
End;
Datalines;
27.Dat
28.Dat
;
Run;
Ksharp
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.