Re: st: What is an integer for Stata?

 From Sergiy Radyakin To statalist@hsphsun2.harvard.edu Subject Re: st: What is an integer for Stata? Date Thu, 8 Oct 2009 10:54:20 -0400

```Thank you Stas, Scott and Austin!

I guess Stas has pointed an even more serious problem that

confirm integer number 1e4
yields that 1e4 is not integer, while
capture assert mod(1e+04,1)==0
yields that it is.

which has implications beyond the -set obs- statement.

So it does matter how you check for being an integer?

Scott's solution is an obvious workaround, but the point is that 1e+04
should not be treated by Stata as an expression, but rather as a
single entity - a number. In fact it is treated this way in the input
statement:

.clear
.set obs 1
.input z

z
1. 1e+01
2. end

.list

And note that -input- does not evaluate the values as expressions,
e.g. an attempt to input 2+3 as an element of the input statement will
cause an error message "cannot be read as a number". So the parser
used in the input statement is properly programmed to recognize that
"e+" or "e-" after a number is a continuation of the same number,
while the regular parser does not do it same.

Best regards,

On Thu, Oct 8, 2009 at 8:01 AM, Austin Nichols <austinnichols@gmail.com> wrote:
> Sergiy--
> This is such a longstanding property of the -set- command, probably
> most Stata users have internalized the behavior, but I suppose it
> should be documented in the help file for -set-.  Note it applies
> equally to set memory, set tracedepth, etc.
>
> On Thu, Oct 8, 2009 at 5:20 AM, Scott Merryman <scott.merryman@gmail.com> wrote:
>> This works:
>> . set obs `=1e+04'
>> obs was 0, now 10000
>>
>> I suppose the 1e+04 has to be evaluated first.
>>
>> Scott
>>
>>
>> On Wed, Oct 7, 2009 at 6:57 PM, Sergiy Radyakin <serjradyakin@gmail.com> wrote:
>>> Dear All,
>>>
>>> how to explain this?
>>>
>>>        version 10.1
>>>        . display 1e+04
>>>        10000
>>>        . capture confirm number 1e+04
>>>        . display _rc
>>>        0
>>>        capture assert mod(1e+04,1)==0
>>>        . display _rc
>>>        0
>>>        . clear
>>>        . set obs 10000
>>>        obs was 0, now 10000
>>>        . set obs 1e+04
>>>        '1e+04' found where integer expected
>>>        r(198);
>>>
>>> So what is an integer then? (or what is 1e+04 if not an integer?)
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/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/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```