BookmarkSubscribeRSS Feed
Dontik
Obsidian | Level 7

Hi

I have a weird problem. I am operating on numbers which add up to around 800 000 000. I have a dataset which I need to split into minidatasets with 1000 000 records. The problem is that when I split my dataset, I loose decimal precision, for example:

Befote splitting the sum of my costs was 810268311.8536920

After splitting - 810268311.8401380

Splitted datasets have the total number of records equal to number of records which was in the initial table.

What can I do about that?

Thank you in advance!

6 REPLIES 6
TomKari
Onyx | Level 15

Your numbers never had the accuracy. The 8 byte floating point numeric format used by SAS can only hold up to fifteen significant digits accurately. Your numbers have sixteen digits; you will lose precision on the sixteenth and above digits.

 

Tom

Dontik
Obsidian | Level 7

Hmm so what is there to do about that? Can I at least keep the number at 0.01 decimal precision? 810268311.85 - so that I could get this exact number after splitting, I do not need anything more precise. I"ve tried adding round(cost,0.01) to my data step which splits the data but that didn't help.

ChrisHemedinger
Community Manager

There is an exhausting treatise on this topic here:

The behavior of SAS is the same as any software that relies on floating point math, defined by an IEEE standard.

 

There is a newer DECIMALCONV= option that might help.  From the doc:

 

DECIMALCONV=STDIEEE

specifies to convert and format decimal values by using the IEEE Standard for Floating-Point Arithmetic 754-2008. Using the STDIEEE argument improves the accuracy and readability of floating-point numbers. In some cases, more significant digits can be displayed in the same field width.

SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!
Dontik
Obsidian | Level 7
Unfortunately, my SAS says "unrecognized SAS option name, DECIMALCONV" 😕
ChrisHemedinger
Community Manager

DECIMALCONV= was added in SAS 9.4. 

SAS For Dummies 3rd Edition! Check out the new edition, covering SAS 9.4, SAS Viya, and all of the modern ways to use SAS!
Astounding
PROC Star

To the extent you can work with integers instead of decimal fractions, the results will improve.  If it would be practical, try:

 

  • Multiply costs * 1000
  • Sum up the new costs
  • Divide the totals by 1000

Those totals should be closer.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

Creating Custom Steps in SAS Studio

Check out this tutorial series to learn how to build your own steps in SAS Studio.

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
  • 6 replies
  • 3202 views
  • 1 like
  • 4 in conversation