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" <statalist@hsphsun2.harvard.edu> |
Subject | Re: st: New variable based on two other variable |
Date | Sat, 6 Apr 2013 11:24:48 +0100 |
The -cond()- function is, in my experience, less known and less used than it deserves. Although I use it a lot, I find it easiest to verbalise when writing down as (e.g.) gen new = if missing(old1, old2) then 0 else max(old1, old2) !!! Warning. That is not legal code. There is a tutorial at SJ-5-3 pr0016 . . Depending on conditions: a tutorial on the cond() function . . . . . . . . . . . . . . . . . . . . . . . D. Kantor and N. J. Cox Q3/05 SJ 5(3):413--420 (no commands) tutorial on the cond() function Freely accessible .pdf at http://www.stata-journal.com/sjpdf.html?articlenum=pr0016 Nick njcoxstata@gmail.com On 6 April 2013 10:58, Nick Cox <njcoxstata@gmail.com> wrote: > Your error with -mvencode- is that -mv(0) is an option, so must follow > the comma. Stata's error message is a misdiagnosis, but the syntax is > explicit in the -help-. > > But -mvencode- is not necessary here. You can just -replace- with 0. > > replace whatever = 0 if whatever == . > > Starting again: > > A more general solution splits in two: whether (a) one missing is > sufficient or (b) two missings are necessary for a zero value. If one > is sufficient you want > > gen new = cond(missing(old1, old2), 0, max(old1, old2)) > > If two are necessary then > > gen new = cond(missing(old1) & missing(old2), 0, max(old1, old2)) > > Nick > njcoxstata@gmail.com > > > On 6 April 2013 10:42, David Ashcraft <ashcraftd@rocketmail.com> wrote: >> Thanks to both Nick and Daniel. I do have missing values. I did manage to produce new variable by using the following command as suggested by Nick: >> >> gen right = max(prishr, govshr) >> >> >> I want to change the missing values to zeros I tried to -mvencode- I got the following results >> >> mvencode govsh mv(0), override >> factor variables and time-series operators not allowed >> >> Based on an old post from Nick, I did the following >> >> >> >> >> . gen gov = govsh >> (936 missing values generated) >> >> . >> . gen pub = pubsh >> (1404 missing values generated) >> >> . su govsh pubh gov pub >> >> Variable | Obs Mean Std. Dev. Min Max >> -------------+-------------------------------------------------------- >> GovSh | 660 40.53545 28.24789 10 100 >> PubSh | 192 36.47 20.73895 10.94 83 >> gov | 660 40.53545 28.24789 10 100 >> pub | 192 36.47 20.73895 10.94 83 >> >> >> mvencode gov pub mv(0) >> factor variables and time-series operators not allowed >> r(101); >> >> Please tell me, how can I encode the missing values to zero? >> Regards >> >> David >> >> >> >> ----- Original Message ----- >> From: Nick Cox <njcoxstata@gmail.com> >> To: "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> >> Cc: >> Sent: Saturday, April 6, 2013 12:05:11 PM >> Subject: Re: st: New variable based on two other variable >> >> Your code does not catch the case of govshr == prishr and it assumes >> that values are positive, which may well be true for your problem. >> Otherwise I don't see why it shouldn't work. >> But there are more direct ways. Here is one >> >> gen right = max(prishr, govshr) >> >> and here is another (although it can give an undesired answer with >> missing values) >> >> gen right = cond(prishr >= govshr, prishr, govshr) >> >> The functions are the least appreciated important part of Stata. For a >> selective review, see >> >> Cox, N.J. 2011. Speaking Stata: Fun and fluency with functions. >> Stata Journal 11: 460-471 >> >> Abstract. Functions are the unsung heroes of Stata. This column is a >> tour of functions that might easily be missed or underestimated, with >> a potpourri of tips, tricks, and examples for a wide range of basic >> problems. >> >> Nick >> njcoxstata@gmail.com >> >> On 6 April 2013 09:52, David Ashcraft <ashcraftd@rocketmail.com> wrote: >> >>> I want to generate a variable based on two existing variables. >>> >>> I have two variables : govshr and prishr and the variable I need is to take the value of govshr or prish whichever is greater. >>> I tried the following but the result is not what I want >>> 1. gen right=0 >>> 2. replace right=govshr if govshr>prishr >>> 3. replace right=prishr if prishr>govshr >>> >>> What happend it, stata takes both commands (2 & 3) separately so I end up with the results of either (2) or (1). >> * >> * 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/ * * 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/