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: generate variable versus define scalar, with conditional statement
From
Nick Cox <[email protected]>
To
[email protected]
Subject
Re: st: generate variable versus define scalar, with conditional statement
Date
Tue, 15 Jan 2013 13:39:33 +0000
scalar newscalar = open[1]
scalar newscalar = open[2]
would work fine. The expression on the RHS (right-hand side), open[1]
or open[2], can be evaluated by Stata and assigned to the LHS
(left-hand side).
su open if date == mdy(1,3,2001), meanonly
scalar newscalar = r(min)
would also work.
But
scalar <name> = <varname>
will always be interpreted as
scalar <name> = <varname>[1]
Nick
On Tue, Jan 15, 2013 at 1:28 PM, Patrick Toche <[email protected]> wrote:
> Thanks for these explanations Nick!
>
>
>> if date == mdy(1,2,2001) scalar newscalar = open
>> still looks most unlikely to be what you really want _unless_ -date-
>> is also a scalar.
>
>
> Barely had I pressed "send" that I realized something was not quite right:
>
> /// This one does what I intend
> clear all
> sysuse sp500
>
> if date == mdy(1,2,2001) scalar newscalar = open
> scalar list
>
> /// This one doesn't do it:
> clear all
> sysuse sp500
> if date == mdy(1,3,2001) scalar newscalar = open
> scalar list
>
> what's going on? The first command stores the value of open at the date
> 02jan2001. I expected the second one to store the value of open at the date
> 03jan2001, but it doesn't ...
>
> So I guess -date- is not a scalar or something ...
>
> Oh wait, what I'm really asking is:
>
>> "I have an if or while command in my program that only seems to evaluate
>> the first observation.What’s going on?"
>>
>> http://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/
>
>
> Okay, I need to follow that one up.
>
> Thanks Nick!
>
> Patrick
>
>
> ----
> Patrick Toche.
>
>
>
>
> On Tue, 15 Jan 2013 21:02:32 +0800, Nick Cox <[email protected]> wrote:
>
>> What's intuitive is usually just what is familiar through experience
>> (although that is contentious within (?) 20% of the history of
>> psychology and 80% of the history of epistemology).
>>
>> Stata has an -if- command and an -if- qualifier and one distinction
>> between them is in where they are used, not in what they look like at
>> first glance.
>>
>> What comes first logically in either case?
>>
>> If something is true, you want a scalar calculated.
>>
>> You want a variable -generate-d using a specified rule but only -if-
>> something is true in each observation.
>>
>> The trouble is that I think that way and explain it that way because I
>> have internalised Stata's syntax.
>>
>> All that said,
>>
>> 1. I'd assert that the form you found puzzling is a common form in
>> many programming languages. It is the -if- qualifier that is
>> idiosyncratic. However, Stata learners are most likely to meet the
>> -if- qualifier first.
>>
>> 2.
>>
>> if date == mdy(1,2,2001) scalar newscalar = open
>>
>> still looks most unlikely to be what you really want _unless_ -date-
>> is also a scalar.
>>
>> To see why, see
>>
>> FAQ . . . . . . . . . . . . . . . . . . . . . if command vs. if
>> qualifier
>> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . J.
>> Wernow
>> 6/00 I have an if command in my program that only seems
>> to evaluate the first observation, what's going on?
>>
>> http://www.stata.com/support/faqs/programming/if-command-versus-if-qualifier/
>>
>> Nick
>>
>> On Tue, Jan 15, 2013 at 12:38 PM, annoporci <[email protected]> wrote:
>>
>>> I learned something today I'd like to share with Statalist.
>>>
>>> The way to conditionally define a variable and a scalar are different. An
>>> example is given below.
>>>
>>> clear all
>>> sysuse sp500
>>>
>>> /// generate a new variable with missing entries except at the given date
>>> mdy(1,2,2001):
>>> gen newvariable = open if date == mdy(1,2,2001)
>>>
>>> /// define a new scalar by the value of variable open at the given date
>>> mdy(1,2,2001):
>>> if date == mdy(1,2,2001) scalar newscalar = open
>>> scalar list
>>>
>>> /// THIS IS NOT THE WAY:
>>> scalar newscalar = open if date == mdy(1,2,2001)
>>>
>>> The above, incorrect way, is intuitive for a beginner (like myself), it
>>> is
>>> similar to the syntax to generate new variables, but it won't work.
>>>
>>> This is trivial for 99% of Statalist users, but may be a useful tip for
>>> the remaining 1%. And if not, almost surely for a future incarnation of
>>> myself scanning through Statalist for hints when the following error
>>> message displays:
>>>
>>> if not allowed
>>>
>>> When I submitted *stata scalar "if not allowed"* Google returned a
>>> solution,
>>> in a more complicated setting:
>>>
>>>
>>> http://statalist.1588530.n2.nabble.com/scalar-do-not-allow-if-td5748129.html
*
* 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/