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

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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