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.

# Re: st: New variable based on two other variable

 From Nick Cox To "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/
```