of course, this is a data loading problem rather than Health Care, but I think I can help.
May I assume you have the data in the order of your input statements, and always separated by the delimiter you defined on your infile statement?
Change your policy, from reading at specific positions with specific lengths, to the style which supports delimited data fields with varying positions.
Infile statements support delimited separated data (DSD) with the infile option DSD.
The input statement supports DSD by allowing input at the next "available" position (using no definitions like @NNN or @'string').
Also input statements support DSD best, with no informat lengths defined on the input statement (because the implication of DSD is that we do not know the lengths and the SAS software will use the lengths we define on an input statement, to parse the line)
What you need to do then, is predefine your variable lengths along with any non-default informats (especially for dates), before the input statement. Then just list your variables on the input statement, in input order. A bit like:
data details ;
length TransactionReferenceNo $10 BinNumber $6 Version $2 TransactionCode $2 ProcessorControlNo $10 TransactionCount 3 ProviderIDQualifier $2 ProviderID $15 ServiceDate 6 CardholderID $8 CardholderFirstName $8 CardholderLastName $20 PlanID $8 RxSegment $2 RxReferenceNoQualifier $1 RxReferenceNo $7 ServiceIDQualifier $2 ServiceID $19 Quantity 8 FillNumber 3 DaysSupply 3 DAWCode $1 UCCharge 8 PrescriberIDQualifier $2 PrescriberID $15 ;
attrib ServiceDate informat= mmddyy. format= date9. ;
infile "e:\sasdata\test.mco.txt" dlm= '02'x lrecl= 10000 ; * support lines wider than 256 ;
/* If you are really confident, you could use the short-form
input TransactionReferenceNo -- PrescriberID ;
otherwise, list all variables ................*/
input TransactionReferenceNo BinNumber Version TransactionCode ProcessorControlNo TransactionCount ProviderIDQualifier ProviderID ServiceDate CardholderID CardholderFirstName CardholderLastName PlanID RxSegment RxReferenceNoQualifier RxReferenceNo ServiceIDQualifier ServiceID Quantity FillNumber DaysSupply DAWCode UCCharge PrescriberIDQualifier PrescriberID ;
run;
Even if your data are spreading over more than one line, the approach above works, provided that the lines break between variables.
Of course, I cannot see a sample of your data. If my assumptions are wrong, better help may be available, if you post a sample of your data (but please replace the '02'x delimiter with a "printable" character)
Hope my description above is clear
Good Luck
Peter Crawford
... View more