07-28-2015 03:00 AM
I'm trying to import data from .txt file. 2 columns are of length 9.19 and 5.8 in the source file;
But in SAS when I write a FORMAT with 9.19 and 5.8, it errors out stating
"decimal specification must be less than the width specification". Can you please help. Thank you!
infile "/directory/sample.txt" delimiter = '|' MISSOVER DSD lrecl=32767 firstobs=2 ;
07-28-2015 10:23 AM
Can you give us an example of the values you're trying to read and how you want them to be formatted please. With 9.19 you're asking SAS to give you 19 decimal places with a total width of only 9, so it doesn't work.
07-28-2015 11:36 AM
Format specification is w.d
|Tip:||Allow enough space to write the value, the decimal point, and a minus sign, if necessary.|
|Requirement:||must be less than w|
|Tip:||If d is 0 or you omit d, w.d writes the value without a decimal point.|
W = 8.2
Also, I don't think you can have 19 decimal places, IEEE floating point number rules.
07-28-2015 12:29 PM
What do you think 9.19 means? Is that 9 digits before the decimal point + the decimal point + 19 digits after the decimal point?
If so then the width of that field will be 29 characters with 28 digits of precision. So in your FORMAT statement you should use 29.19 (which can also be written as F29.19).
But you cannot store 28 digits of precision in a floating point number. So either
1) Remove the format for that variable from the INPUT statement.
SAS will then just do the best it can to convert the data it sees into a floating point number. You might lose some digits of precision.
2) Read it as character. You could do that by using :$29. as the format on the INPUT statement. There is no need to attach a format to character variables in your FORMAT statement.
07-28-2015 12:34 PM
SAS uses 8 byte floating point for numeric variables, which provides a maximum of 15 significant digits. If you need more, you'll have to capture the data as character, but you won't be able to perform calculations on it.