<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Numeric issue in datastep in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341399#M272756</link>
    <description>&lt;P&gt;Could you please try the below approach&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
set test2;
diff = t1 - t2;
format diff mynum.;
if compress(put(diff,best.))='0' then delete;
run; &lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 16 Mar 2017 02:21:54 GMT</pubDate>
    <dc:creator>Jagadishkatam</dc:creator>
    <dc:date>2017-03-16T02:21:54Z</dc:date>
    <item>
      <title>Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341394#M272753</link>
      <description>&lt;P&gt;data test;&lt;/P&gt;
&lt;P&gt;set test2;&lt;/P&gt;
&lt;P&gt;diff = t1 - t2;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;sample data&lt;/P&gt;
&lt;P&gt;t1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; diff&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;6&lt;/P&gt;
&lt;P&gt;14191.65&amp;nbsp;&amp;nbsp; 14191.65&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.818989E-12&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The issue is whenever I encounter a large number the difference is reflected as scientific notation where as it should be a 0&lt;/P&gt;
&lt;P&gt;I used&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt;&lt;/FONT&gt; &lt;STRONG&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;format&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="Courier New" size="3"&gt;picture&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt; mynum&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;low - high = '&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="Courier New" size="3"&gt;000000000009&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="Courier New" size="3"&gt;';&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#000080" face="Courier New" size="3"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size="3"&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;The number displays as a 0 however when I apply a test such as&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;if diff = 0 then delete;&amp;nbsp; The test fails and the row still appears&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size="3"&gt;any ideas&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Mar 2017 02:06:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341394#M272753</guid>
      <dc:creator>Q1983</dc:creator>
      <dc:date>2017-03-16T02:06:41Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341397#M272754</link>
      <description>&lt;P&gt;Welcome to computing &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is a known 'issue'. Please see the full explanation below.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#p0ji1unv6thm0dn1gp4t01a1u0g6.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/lrcon/69852/HTML/default/viewer.htm#p0ji1unv6thm0dn1gp4t01a1u0g6.htm&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can resolve this by formatting your data, using something like 8.1 should be enough.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And you can change your test to:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if round(value, 0.0001) = 0 then &amp;lt;action&amp;gt;;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Mar 2017 02:17:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341397#M272754</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-03-16T02:17:55Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341398#M272755</link>
      <description>&lt;P&gt;Just responded to a similar question in a different thread. The topic you want to Google is numeric precision. It's not just with SAS, but any computer.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The numbers are likely to be off somewhere off to the right decimal place. The solution is to round the numbers to the number of decimal points that are practically significant to whatever you're doing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Mar 2017 02:20:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341398#M272755</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-03-16T02:20:57Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341399#M272756</link>
      <description>&lt;P&gt;Could you please try the below approach&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
set test2;
diff = t1 - t2;
format diff mynum.;
if compress(put(diff,best.))='0' then delete;
run; &lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 16 Mar 2017 02:21:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341399#M272756</guid>
      <dc:creator>Jagadishkatam</dc:creator>
      <dc:date>2017-03-16T02:21:54Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341438#M272757</link>
      <description>&lt;P&gt;As the others have already noted, this is an artifact resulting from the way SAS stores numeric values.&lt;/P&gt;
&lt;P&gt;Adapt your data step (and other steps that do similar calculations):&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
set test2;
diff = round(t1 - t2,.00001);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And you'll get rid of problems caused by precision overflows or numbers that are periodic in binary representation.&lt;/P&gt;</description>
      <pubDate>Thu, 16 Mar 2017 07:22:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341438#M272757</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-03-16T07:22:04Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341604#M272758</link>
      <description>&lt;P&gt;BTW your example data is &lt;STRONG&gt;wrong&lt;/STRONG&gt; because you let a very likely default format of best8. display the values of t1 and t2.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I know this because when I copy your pasted example data and use that in a data step the result is 0.&lt;/P&gt;
&lt;PRE&gt;data example;
   x=14191.65;
   y=14191.65;
   result = y-x;
   put result= best32.;
run;

&lt;/PRE&gt;</description>
      <pubDate>Thu, 16 Mar 2017 14:41:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341604#M272758</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-03-16T14:41:34Z</dc:date>
    </item>
    <item>
      <title>Re: Numeric issue in datastep</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341713#M272759</link>
      <description>&lt;P&gt;In addition to what others have said, you should &lt;A href="http://blogs.sas.com/content/iml/2012/06/25/programming-tip-avoid-testing-floating-point-values-for-equality.html" target="_self"&gt;avoid&amp;nbsp;testing floating-point values for equality.&lt;/A&gt;&amp;nbsp;Instead, test&amp;nbsp;whether the value is within a small&amp;nbsp;amount of the target value:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;if fabs(diff) &amp;lt; 1e-6 then delete;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Mar 2017 18:17:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Numeric-issue-in-datastep/m-p/341713#M272759</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-03-16T18:17:55Z</dc:date>
    </item>
  </channel>
</rss>

