Statalist


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: st: comparing dates: keep if dates<d(DDMMYYYY)


From   Ana Gabriela Guerrero Serdan <[email protected]>
To   [email protected]
Subject   RE: st: comparing dates: keep if dates<d(DDMMYYYY)
Date   Wed, 28 Jan 2009 02:01:56 -0800 (PST)

Thank you!  I will study all the options.

rgds, 
Gaby 




--- On Tue, 1/27/09, Nick Cox <[email protected]> wrote:

> From: Nick Cox <[email protected]>
> Subject: RE: st: comparing dates: keep if dates<d(DDMMYYYY)
> To: [email protected]
> Date: Tuesday, January 27, 2009, 3:36 PM
> Wrong way round: max <-> any, min <-> all. 
> 
> Nick 
> [email protected] 
> 
> 
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of
> Nick Cox
> Sent: 27 January 2009 21:14
> To: [email protected]
> Subject: RE: st: comparing dates: keep if
> dates<d(DDMMYYYY)
> 
> Given that Ana Gabriela has indicators (dummies), there is
> an even
> easier way to do it 
> 
> egen tokeep = rowmax(k*) 
> 
> Given lots of indicators, which are Booleans with 1 meaning
> true and 0
> meaning false, then their row minimum indicates whether any
> is true and
> the row maximum indicates whether all are true in each
> observation. 
> 
> My last paragraphs on my previous emails still stand. 
> 
> Nick 
> [email protected] 
> 
> Nick Cox
> 
> Another way to do it would be to use the -egen- function
> -rany()- which
> is included in -egenmore- from SSC. 
> 
> egen tokeep = rany(k*), cond(@ == 1) 
> 
> The name -rany- was chosen at a time when official -egen-
> functions for
> rowwise operations bore names like -rmean-, the
> "r" signalling row.
> Those in turn were named concisely as a hangover from days
> when Stata
> for DOS was being shipped and command names were limited by
> the
> filename.ext limit for DOS filenames. 
> 
> Despite the brevity of this solution, I wouldn't
> recommend it strongly.
> It is better in my view to become accustomed to solving
> these problems
> with a loop over the variables, using -forval- (as below)
> or -foreach-.
> There is no efficiency loss either, as the -egen- function
> is also
> looping over the variables, so your code with -egen- is
> really longer,
> not shorter. 
> 
> My guess remains that no dummies are really needed, but
> that wasn't the
> immediate question. 
> 
> Nick Cox
> 
> Precisely this question was asked by Steve a.k.a. sdm1 on
> 11 January 
> 
> <http://www.hsph.harvard.edu/cgi-bin/lwgate/STATALIST/archives/statalist
> .0901/date/article-390.html> 
> 
> And the thread attracted several replies. 
> 
> It's disappointing that the question should (a)
> re-emerge so quickly and
> (b) not be answered. 
> 
> First off, why doesn't that -if k*==1- syntax work? 
> 
> The syntax of -if- is that -if- can be followed by an
> expression. An
> expression in Stata, as in mathematics, is such that you
> can plug in
> values and then calculate to get a result. For example,
> -mpg > 14- is an
> expression. For each observation you can get a result for
> that
> expression if you have a numeric variable -mpg- (or,
> lacking a variable,
> a scalar). In this example the result would be 1 or 0,
> depending on
> -mpg-.  
> 
> A wildcard varlist such as k* will be expanded by Stata in
> contexts
> where Stata expects a varlist. But even if expansion were
> allowed
> whenever a wild card was part of an expression you would
> _at the most
> generous_ get something like 
> 
> ... if k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15
> k16 == 1 
> 
> which would be illegal. (Stata could make sense of -if k1-,
> but the rest
> makes no sense.) 
> 
> As it happens, expansion is _not_ allowed whenever a wild
> card is part
> of an expression. So even if in context -if mpg* > 14-
> could only mean
> -if mpg > 14- as far as you were concerned, because
> -mpg- is the only
> variable that satisfies -mpg*-, that still won't work. 
> 
> The important point to carry forward is that there is no
> way that Stata
> will ever directly interpret k* in the way you want. 
> 
> Second, how do you do it? The thread started by the posting
> cited above
> gave some possibilities. 
> 
> Suppose that we start with the basis that you have several
> dummy
> variables. You could use a loop 
> 
> gen tokeep = 0 
> quietly forval j = 1/16 { 
> 	replace tokeep = max(tokeep, k`j') 
> } 
> keep if tokeep 
> 
> or you could use -inlist- 
> 
> keep if inlist(1, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10,
> k11, k12,
> k13, k14, k15, k16) 
> 
> The last could be automated 
> 
> unab kvars : k* 
> local kvars : subinstr local kvars " "
> ",", all 
> keep if inlist(1, `kvars') 
> 
> Looking at your problem I suspect that your entire problem
> could be
> automated without needing any dummy variables, but quite
> how would
> depend on how the critical dates for the governorates were
> defined. 
> 
> Nick 
> [email protected] 
> 
> Ana Gabriela Guerrero Serdan
> 
> Just had the time to work this out. I actually had to
> create some
> dummies first: 
> 
> tabulate   loc2prov, gen(Governorate)
> 
> gen k1= date<td(30may2004) & Governorate1==1
> gen k2= date<td(20may2004) & Governorate2==1
> gen k3= date<td(21may2004) & Governorate3==1
> gen k4= date<td(15may2004) & Governorate4==1
> gen k5= date<td(25aug2004) & Governorate5==1
> gen k6= date<td(15may2004) & Governorate6==1
> gen k7= date<td(30aug2004) & Governorate7==1
> gen k8= date<td(29may2004) & Governorate8==1
> gen k9= date<td(16may2004) & Governorate9==1
> gen k10= date<td(20may2004) & Governorate10==1
> gen k11= date<td(25may2004) & Governorate11==1
> gen k12= date<td(17may2004) & Governorate12==1
> gen k13= date<td(23may2004) & Governorate13==1
> gen k14= date<td(19may2004) & Governorate14==1
> gen k15= date<td(7jun2004) & Governorate15==1
> gen k16= date<td(20may2004) & Governorate16==1
> gen k17= date<td(19may2004) & Governorate17==1
> gen k18= date<td(18may2004) & Governorate18==1
> 
> 
> keep if k1==1 | k2==1 | k3==1 | k4==1 | k5==1 | k6==1 |
> k7==1 | k8==1 |
> k9==1 | k10==1 | k11==1 | k12==1 | k13==1 | k14==1 | k15==1
> | k16==1 |
> k17==1 | k18==1 
> 
> I wonder if there is a way to tell stata to create one
> variable whenever
> the conditions above hold? 
> 
> I tried this but it doesnt work: 
> 
> gen dummy=1 if k*
> 
> invalid syntax
> r(198);
> 
> 
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
> 
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/


      
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



© Copyright 1996–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index