Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


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

Re: st: using value of one variable to read value of specific other variable out of a list of variables


From   Nick Cox <[email protected]>
To   [email protected]
Subject   Re: st: using value of one variable to read value of specific other variable out of a list of variables
Date   Tue, 10 May 2011 08:48:11 +0100

Christian's answer will work fine. But note that

foreach n of numlist 1/3 {

is always better rewritten as

forval n = 1/3 {

In essence, why does have Stata have a -forval- command when you can
always use -foreach- with a -numlist-? -forval- is concise and
efficient about going through its numlist. In an example like this,
the efficiency gain will be minute, but the general point remains.

Nick

On Mon, May 9, 2011 at 7:14 PM, Christian Holz (Stata list)
<[email protected]> wrote:

> what about this?
>
> generate z=.
> replace z=x1 if y==1
> replace z=x2 if y==2
> replace z=x3 if y==3
>
> or more generically (ie if there are more than 3 possibilities)
>
> generate z=.
> foreach n of numlist 1/3 {
>    replace z=x`n' if y==`n'
> }


[email protected]> wrote:

>> I am sure there is some obvious solution that I am not seeing, but I
>> couldn't figure it out:
>> I want to create a variable (z) that contains the value from one variable
>> out of a list of variables (say x1 - x3) depending on the valuable of
>> another variable (y). The list of variables is a) named in a way that the
>> value of y could be used to refer to the correct name of the variable and b)
>> ordered so that the value of y could also be used a locational reference (as
>> the offset command does in Excel). I don't think b) could work in STATA, but
>> I couldn't find a solution for a) either. See below an example. Therein, z
>> in the first row is supposed to be 1 and in the second row 5 (if y = 2, z is
>> supposed to have the value of x2).
>>
>> x1    x2    x3    y
>> 1    2    3    1
>> 0    5    4    2
>>
>> Here is the closest I came towards a solution:
>> local a = y
>> gen z = x`a'
>>
>> This command, however, only does half the job as the value of the local a is
>> not being rest for every row. I would be very happy for any advice.
>>

*
*   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–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index