Here's an idea to try out as well. If the data occurs in very specific blocks in a predictable pattern, then this structure may work: data want; infile in (with all suitable options like line length truncover...); input @; *--- read the line into _infile_ buffer; if left( _infile_ ) =: 'Daily Report' then do; *--- skip the report headers; do i=1 to 9; input; end; *--- swallow 9 lines; return; end; acct = substr((left,_infile_),1,7); if verify(acct,'0123456789') = 0 then do; input #1 acct : 7. company_name db_cr_amount dt_appr #2 ..... #3 ..... #4 ..... #5 ..... #6 ..... #7 ..... ; output; end; run; The idea is to read a line & hold it, figure out if it is the start of a known block, if it is not the start of something useful, do nothing with it, start next loop. If it is the start of a known block, then handle that known block as appropriate. The "return" statement can be used to "start the next iteration of the data step". Too bad you have to work with this data structure, it's far easier if you can arrange with them to give you the CSV file or XML file or Excel file even. Anything structured is better than having to "undo" the report formatting.
... View more