BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
MillerEL
Obsidian | Level 7

Hello,

 

I am using a macro to read in 12 txt files. Each file corresponds to a month, but there is no variable within the file that reflects the month - this information is only in the filename. I need help figuring out how to extract the month from the file name within the macro. Each file is named tan<mon>yy. I haven't been able to apply any of the methods I've seen for extracting file names to my code below. Any ideas on how to do this?

 

filename tanf1 'Q:/txtfiles/tan*13.txt' lrecl=80 recfm=v;

%macro tanfin;
	input @1 relind $char1. @3 casdcn $char8. @12 indvdcn $char8.
  		 @21 county $char3. @25 zip $char5. @31 rac $char1. @33 sx 
                 $char1. @35 agen 3. @39 nmon 4. @46 edu $char2.;
%mend tanfin;

DATA one;
	infile tanf1;
	%tanfin;
run;
quit;

 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

Not sure why you have coded that input statement as a macro.

Use the FILENAME= option on the INFILE statement to have SAS tell you want file the current record came from.

filename tanf1 'Q:/txtfiles/tan*13.txt' lrecl=80 recfm=v;

data all;
  length fname $256 filename $32 ;
  infile tanf1 filename=fname truncover;
  input @1 relind $char1. @3 casdcn $char8. @12 indvdcn $char8.
        @21 county $char3. @25 zip $char5. @31 rac $char1. 
        @33 sx $char1. @35 agen 3. @39 nmon 4. @46 edu $char2.
  ;
  filename = scan(fname,-2,'./\');
run;

View solution in original post

2 REPLIES 2
Tom
Super User Tom
Super User

Not sure why you have coded that input statement as a macro.

Use the FILENAME= option on the INFILE statement to have SAS tell you want file the current record came from.

filename tanf1 'Q:/txtfiles/tan*13.txt' lrecl=80 recfm=v;

data all;
  length fname $256 filename $32 ;
  infile tanf1 filename=fname truncover;
  input @1 relind $char1. @3 casdcn $char8. @12 indvdcn $char8.
        @21 county $char3. @25 zip $char5. @31 rac $char1. 
        @33 sx $char1. @35 agen 3. @39 nmon 4. @46 edu $char2.
  ;
  filename = scan(fname,-2,'./\');
run;
MillerEL
Obsidian | Level 7
I coded it as a macro, because I'm used to working with larger and more varied file layouts that have to be combined. Obviously, I was overthinking - I've never seen this approach - but it worked like a charm! Thank you!

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 1535 views
  • 1 like
  • 2 in conversation