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: generate variable versus define scalar, with conditional statement


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
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 <njcoxstata@gmail.com> 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 <annoporci@gmail.com> 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/


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