RE: st: What is an integer for Stata?

 From "Nick Cox" To Subject RE: st: What is an integer for Stata? Date Thu, 8 Oct 2009 16:01:29 +0100

```What you have found is, strictly, an inconsistency and -- at worst -- a small bug. But, like Austin, I don't think it is a serious problem.

Introductory users, I guess, will rarely type

set obs 1e+4

while more experienced users who tried that would quickly realise that Stata doesn't like that and replace it in one of the ways specified earlier in the thread. So, I think this should go on the developers' to-do list as something to fix, but marked as very low priority.

Nick
n.j.cox@durham.ac.uk

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.

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.

On Wed, Oct 7, 2009 at 6:57 PM, Sergiy Radyakin <serjradyakin@gmail.com> wrote:

>>> 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/
```