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   Sergiy Radyakin <[email protected]>
To   "[email protected]" <[email protected]>
Subject   Re: st: The accuracy of the float data type
Date   Fri, 24 Jan 2014 11:31:05 -0500

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/


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