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:06:12 +0000
In addition
. help scalar
gives the syntax you can use, and it's a fair principle to assume that
what is not permitted is forbidden. That is, -scalar- definitions
don't explicitly allow -if- or for that matter -in-.
Nick
On Tue, Jan 15, 2013 at 1:02 PM, 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
>>
>> --
>> Patrick Toche.
*
* 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/