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
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
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.