DATA Step, Macro, Functions and more

txt in file retreive date

Reply
Contributor
Posts: 37

txt in file retreive date

I have txt files called

2011.06.01_case.txt

2011.06.02_case.txt

2011.06.03_case.txt

2011.06.04_case.txt

2011.06.05_case.txt

ext.

I need to read in all the txt file for the past 30 days and attached the date on the txt file to the data inside the file

I started by createding a beginning case_date

Proc sql;

create table p_date as

select datepart(today()) as process_date;

quit;

Data case_date;

set p_date;

case_date = intnx('day',process_date,-30);

run;

I am having trouble with the loop;

do until &case_date = process_date;

Data &case_date_tracking;

Infile "site_mgt\&case_date_case.txt "

Firstobs = 2 dsd missover;

informat Case_number

             &Case_date;

input      Case_number

              &Case_date;

next &case_date;

run;

any help would be greatly appreciated

Respected Advisor
Posts: 3,799

txt in file retreive date

You can use a wildcard FILE reference and read all the files as one stream and create a variable to identify the source of input as your read.  The relevant INFILE statement options are EOV and FILENAME you may need other options too.

filename FT55F001 '*_case.txt';

data cases;

   length FILENAME FILE $256;

   retain EOV 1;

   infile FT55F001 EOV=EOV FILENAME=FILENAME;

   input .......;

   if eov then do;

      File=Filename;

      eov = 0;

      end;

   run;

Frequent Contributor
Posts: 104

txt in file retreive date

data_null_'s solution is great for processing large number of files.  Using wildcards to selectively generate the proper filename statement is flexible and powerful.

Here's a more programmatic approach:

%macro dayloop(days);

     %let now=%sysfunc(today());     * set to whatever end date;

     %do i = %eval(1-&days) %to 0;  * 7 becomes: -6 -5 -4 -3 -2 -1 0 ;

          %let date = %sysfunc(intnx(day,&now,&i),yymmdd10.);   * format according to need;

           %put &i &date;

          filename txt "&date.xxxxxxx";

          data txt&date;

               retain date xxxxxxxxxx;

               infile xxxxxxxx;

               input xxxxxxxxxx;

          run;

    

     %end;

%mend;

%dayloop( 30 )

Super User
Posts: 10,023

txt in file retreive date

How about:

%let path=c:\temp\ ;
filename txt pipe "dir &path*.txt /B";
data want;
 infile txt truncover ;
 input txt_name $50.;
 txt_name="&path"||strip(txt_name);
 length fname $ 50;
 infile dummy filevar=txt_name filename=fname end=last length=len;
 do until(last);
 input row $varying200. len;
 filename=scan(fname,-2,'.\');
 output;
 end;
run;

Ksharp

Ask a Question
Discussion stats
  • 3 replies
  • 230 views
  • 0 likes
  • 4 in conversation