You may want to go back to what ever file description you have for what your data should contain. You have a large number of your variables with and Informat of $1. That often means that the field was actually missing any values. When I see variables whose names end in Total I kind of expect them to be numeric as we seldom sum or "total" character values.
When I see this:
informat AC $1. ;
informat AD $1. ;
informat AL $11. ;
informat EP $1. ;
informat ET $11. ;
informat AC_EstTotal $1. ;
informat AD_EstTotal $1. ;
informat AL_EstTotal $11. ;
informat EP_EstTotal $1. ;
informat ET_EstTotal $11. ;
I would expect that AC AD AL EP and ET are numeric and then you have totals. Would it be a far stretch to say that your orginal data file has many currency values such a $12,456.89 ? If you expect to do arithmetic later (ie SUM) with them then you will want to address that issue.
The main purpose of this part of the exercise is to get a file definition that will work for all of your expected data so you want to make sure that the informats are correct for your values. When you do get another file values, AC for example, then this code would truncate the value to the first character. Which if my guess is correct would be "$" or your currency symbol. So as a minimum you likely want all of those AC, AD etc variables to have a wider informat to read the longest expected value.
The conversion to the code listed in @Reeza's link is very simple.
The link includes:
*Use wildcard in input;
infile "Path\*.txt" eov=eov filename=filename truncover;
so using your example code:
infile 'D:\Raw_Data\RMS_Transposed_Canvass_History\*.csv' delimiter = ',' MISSOVER DSD lrecl=32767 firstobs=2
eov=eov filename=filename truncover;
Then just before the INPUT statement in the code you show add the
*Input first record and hold line;
input@;
*Check if this is the first record or the first record in a new file;
*If it is, replace the filename with the new file name and move to next line;
if _n_ eq 1 or eov then do;
txt_file_name = scan(filename, -1, "\");
eov=0;
end;
*Otherwise go to the import step and read the files;
else input /*<= this is where the generated INPUT you show in your code goes*/
Make sure that all of the INFORMAT statements appear before the line with INPUT @;
Please post example code using the forum menu icon {i}. The forum otherwise tends to reformat code somewhat making it hard to read and inserting line breaks and such. This reformatting will sometimes result in code that does not run, always makes the code hard to read and just plain takes up too much screen space.
... View more