Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
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: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 <annoporci@gmail.com> 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 <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 * * 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/