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
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.