Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: The accuracy of the float data type


From   R Zhang <[email protected]>
To   [email protected]
Subject   Re: st: The accuracy of the float data type
Date   Fri, 24 Jan 2014 11:55:08 -0500

Thanks to you both, Sergiy and Nick .

Nick,

1.are you saying that I should follow Sergiy's advice to change
format? If so, given the large number of observations I have , how do
I automate the process?

2. if I do not change the format, I listed some observations below to
show you that sales and maxsale look the same, however, when I use" l
if sales == maxsale" it does not list all of the observations that
appear equal.


*****************
   +--------------------+
     |   sales   maxsale1 |
     |--------------------|
  1. |  25.395     25.395 |
  2. |  32.007     32.007 |
  3. |  53.798     53.798 |
  4. |  12.748     12.748 |
  5. |  13.793     13.793 |
 ..... omitted to save space

 31. | 166.181    166.181 |
 32. |  21.927    166.181 |
 33. |  26.328    189.897 |
 34. |  31.787    189.897 |
 35. | 189.897    189.897 |
     |--------------------|
 36. | 264.582    264.582 |
 37. |   33.61    264.582 |
 38. | 312.227    312.227 |
 39. |  35.413    312.227 |
 40. |  406.36     406.36 |
     |--------------------|
 41. | 444.875    444.875 |


 egen maxsale=max(sales), by (gvkey year)

 l if sales == maxsale,

the first observation that is listed is  444.875    444.875 ,

why is that?

thanks!

On Fri, Jan 24, 2014 at 11:34 AM, Nick Cox <[email protected]> wrote:
> This is very good advice in general, but in this case the maxima are
> selected from the original values, so that equality is to be expected
> for some observations.
> Nick
> [email protected]
>
>
> On 24 January 2014 16:31, Sergiy Radyakin <[email protected]> wrote:
>> Zhang, avoid comparing floating point numbers for equality. Instead
>> there is a system variable c(epsfloat) , which you can refer to when
>> you need to deal with precision:
>>
>> clear
>> input float sales
>> 25.395
>> 32.007
>> end
>>
>> list
>>
>> display c(epsfloat)
>>
>> list if sales==25.395
>> list if abs(sales-25.395)<=10*c(epsfloat)
>>
>> list if sales==32.007
>> list if abs(sales-32.007)<=10*c(epsfloat)
>>
>>
>> Best, Sergiy Radyakin
>>
>> On Fri, Jan 24, 2014 at 11:23 AM, Maarten Buis <[email protected]> wrote:
>>> I would do this differently:
>>>
>>> *------------------ begin example ------------------
>>> // get some example data
>>> sysuse auto
>>>
>>> // create a variable denoting missing values
>>> gen byte miss = missing(rep78, price)
>>>
>>> // create our indicator variable
>>> bys rep78 miss (price) : gen max = _n == _N if !miss
>>>
>>> // admire the result
>>> list rep78 miss price max in 1/12, sepby(rep78)
>>> *------------------- end example -------------------
>>> * (For more on examples I sent to the Statalist see:
>>> * http://www.maartenbuis.nl/example_faq )
>>>
>>> Hope this helps,
>>> Maarten
>>>
>>>
>>> On Fri, Jan 24, 2014 at 4:53 PM, R Zhang <[email protected]> wrote:
>>>> Dear Statalist,
>>>>
>>>> my data structure is as follows
>>>>
>>>> firmID    segmentID   sales year
>>>> 1001       1               25.395     1990
>>>> 1001       1                32.007     1991
>>>>
>>>> ............
>>>>
>>>> a firm can operate in multiple segments as identified by  segmentID .
>>>> I wanted to identify the largest segment by sales,so I used
>>>>
>>>> bysort firmID year : egen maxsale=max(sales)
>>>>
>>>> then I did
>>>> gen PriSIC=0
>>>> replace PriSIC=1 if sales=maxsale
>>>>
>>>> I got
>>>> firmID    segmentID   sales year                  maxsale    prisic
>>>> 1001       1               25.395     1990            25.395         0
>>>> 1001       1                32.007     1991            32.007       0
>>>>
>>>> I could not figure out why prisic is 0, so I compute the diffderence
>>>> (sales-maxsale), it shows a very small negative number , and the data
>>>> dictionary shows sales format float %12.0g, and maxsale format float
>>>> %9.0g
>>>>
>>>> what should I do to correct this?
>>>>
>>>> thanks!!!
>>>>
>>>> Rochelle
>>>> *
>>>> *   For searches and help try:
>>>> *   http://www.stata.com/help.cgi?search
>>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>>> *   http://www.ats.ucla.edu/stat/stata/
>>>
>>>
>>>
>>> --
>>> ---------------------------------
>>> Maarten L. Buis
>>> WZB
>>> Reichpietschufer 50
>>> 10785 Berlin
>>> Germany
>>>
>>> http://www.maartenbuis.nl
>>> ---------------------------------
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>> *   http://www.ats.ucla.edu/stat/stata/
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>> *   http://www.ats.ucla.edu/stat/stata/
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index