Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

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

From |
Mani Subramani <subra010@umn.edu> |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: RE: Problems with execution of conditional branching.. |

Date |
Wed, 13 Mar 2013 22:27:22 -0500 |

Sarah Thank you very much for a prompt and detailed explanation...this was driving me completely crazy particularly since I tried all kinds of conditional branches with differing logic to do the parsing, to no avail. I have been stuck at this juncture from the beginning of the week and I can now move forward! Your response showing how I can get a line by line evaluation done is a nuance I missed understanding earlier.. this is enormously useful. BTW, do you mind letting me know the norm to thank responders on Statalist...is a response to the list appropriate or is it expected that we do it in private. thanks a lot for taking the time to respond. best wishes Mani On Wed, Mar 13, 2013 at 8:22 PM, Sarah Edgington <sedging@ucla.edu> wrote: > I think Scott's suggestion about how to tackle this problem probably offers > a more efficient strategy than this one. > However, know why this example doesn't work will probably also be helpful to > you in the future. > > The problem is that the if statements here are only evaluating your first > observation. See -help ifcmd- and -help if- for more details. > The thing that I think isn't entirely clear from the helpfile is that the > programming if checks the conditional statement once and if it's true it > takes the action in the braces. Unless otherwise specified it evaluates the > first observation in the data when the conditional involves a variable. > To get an observation by observation evaluation of a conditional you have to > use the if expression after a command. > So -gen event_month=substr(opendate,6,1) if comma_3==2 & comma_2==1- will > check that condition for each observation and create the relevant variable. > > Contrast that with a simplification of your first conditional (written as a > single line instead of in braces) > -if comma_3==2 & comma_2==1 gen event_month = substr(opendate, 6,1)- > Here Stata is only evaluating the conditional once. Since it involves > variables (which, by virtue of being variables are going to be different > across observations) there has to be some rule about what observation is > used to evaluate this statement. Since you haven't specified an observation > number to evaluate, it defaults to the first observation. > > So running your code will perform only one of the four possible sets of > commands you specified. Which one it performs depends entirely on the first > observation in the data. > > Hopefully that helps clear up what's going on here. > > -Sarah > > > > > > -----Original Message----- > From: owner-statalist@hsphsun2.harvard.edu > [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Mani Subramani > Sent: Wednesday, March 13, 2013 3:39 PM > To: statalist@hsphsun2.harvard.edu > Subject: st: Problems with execution of conditional branching.. > > I am new to Stata but I have programmed before (SPSS, SAS) etc. andI am > confused by the behavior of STATA in executing the code below. > > I am trying to parse a date-string that is currently in one variable with > format "yyyy-mm-dd-hh-ss"..it unfortunately has 1 digit months and days. > Further, because of the unconventional numbering of months (0-11, rather > than 1-12), I am unable to use the much easier > dofc(Opendate)) command build into STATA that does some intelligent > validation and fails to import dates like October 31 (which is indicated in > my data as 2012,9,31 > > I use the location of the comma separators to parse the string with strpos > to create variables...the code runs..but it clearly does not work properly. > I still have some dates with ",7" which I find inexplicable because the > branch where this should get executed picks only 1 character dates. > I have four mutually exclusive branches to handle the different combinations > of 2 digit and 1 digit month, day...but for some reason..this is not working > properly. > Some of the statements within branches that are excluded by the if seem to > be getting executed... > > This would be ideally executed with a Case statement -or with Regex (I tried > but couldnt figure it out) but the code below should be doing that but it > clearly isn't. Thanks in advance for your help thanks in advance for your > help Mani ==================== gen event_year = substr(opendate, 1,4) > //this works just fine, year always 4 digits // I test for pattern of month, > day based on location of comma3 and > comma2 in date string > //date string format: yyyy,mm,dd - month, day can be either 1 or 2 digits > // location of third comma - it is either in 9, 10 or 11 > > gen comma_3 = strpos(substr(opendate,9,3), ",") // 1= 1 dig month& date, 3+2 > dig month, date, 2 = unclear gen comma_2 = strpos(substr(opendate,7,2), ",") > //when comma3 is ; > comma_2==1 indicates m,dd; comma_2==2 - mm,d > > if comma_3==2 & comma_2==1 { > gen event_month = substr(opendate, 6,1) > gen event_day = substr(opendate, 8,2) > } > else if comma_3==2 & comma_2==2 { > gen event_month = substr(opendate, 6,2) > gen event_day = substr(opendate, 9,1) > } > > else if comma_3==1 { > gen event_month = substr(opendate, 6,1) > gen event_day = substr(opendate, 8,1) > } > else if comma_3==3 { > gen event_month = substr(opendate, 6,2) > gen event_day = substr(opendate, 9,2) > } > > ================== results=== > opendate comma_3 comma_2 event_year event_month event_day > 2012,9,18,13,21,12 2 1 2012 9 18 > 2012,9,18,10,51,33 2 1 2012 9 18 > 2012,9,22,16,23,48 2 1 2012 9 22 > 2012,10,29,14,59,52 3 2 2012 1 ,2 > 2012,10,21,23,57,29 3 2 2012 1 ,2 > 2012,10,22,20,10,23 3 2 2012 1 ,2 > * > * 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/ > > * > * 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/ -- Mani Subramani, msubramani@umn.edu Information and Decision Sciences Department Carlson School of Management, University of Minnesota Minneapolis, MN 55455. 612-624-3522 * * 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**:**Closure on Statalist [was: Re: st: RE: Problems with execution of conditional branching..]***From:*njcoxstata@gmail.com

**References**:**st: Problems with execution of conditional branching..***From:*Mani Subramani <subra010@umn.edu>

**st: RE: Problems with execution of conditional branching..***From:*"Sarah Edgington" <sedging@ucla.edu>

- Prev by Date:
**RE: st: marginsplot after xtmixed with square term** - Next by Date:
**Re: st: Prediction at the 'mean' of a categorical- xi3?** - Previous by thread:
**st: RE: Problems with execution of conditional branching..** - Next by thread:
**Closure on Statalist [was: Re: st: RE: Problems with execution of conditional branching..]** - Index(es):