BookmarkSubscribeRSS Feed
sree12
Calcite | Level 5

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!

data  temp;

  infile "/directory/sample.txt" delimiter = '|' MISSOVER DSD  lrecl=32767 firstobs=2  ;

  INPUT

   VAR1    :10.

   VAR2    :6.

  ;

  FORMAT

   VAR1    9.19

   VAR2    5.8

  ;

run ;

Thank you!

4 REPLIES 4
evp000
Quartz | Level 8

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.

Reeza
Super User

Format specification is w.d

w

specifies the width of the output field.

Range:1-32
Tip:Allow enough space to write the value, the decimal point, and a minus sign, if necessary.

d

specifies the number of digits to the right of the decimal point in the numeric value. This argument is optional.

Range:0-31
Requirement:must be less than w
Tip:If d is 0 or you omit d, w.d writes the value without a decimal point.


SAS(R) 9.2 Language Reference: Dictionary, Fourth Edition

W = 8.2

WWWWW.DD

Also, I don't think you can have 19 decimal places, IEEE floating point number rules.

Tom
Super User Tom
Super User

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.

TomKari
Onyx | Level 15

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.

Tom

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 8654 views
  • 0 likes
  • 5 in conversation