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]

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:02:32 +0000 |

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/

**Follow-Ups**:**Re: st: generate variable versus define scalar, with conditional statement***From:*annoporci <annoporci@gmail.com>

**Re: st: generate variable versus define scalar, with conditional statement***From:*Nick Cox <njcoxstata@gmail.com>

**References**:**st: generate variable versus define scalar, with conditional statement***From:*annoporci <annoporci@gmail.com>

- Prev by Date:
**st: new command for net survival** - Next by Date:
**Re: st: generate variable versus define scalar, with conditional statement** - Previous by thread:
**st: generate variable versus define scalar, with conditional statement** - Next by thread:
**Re: st: generate variable versus define scalar, with conditional statement** - Index(es):