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: Create a new variable based on the current observation and values of other observations in the same group


From   Nick Cox <[email protected]>
To   "[email protected]" <[email protected]>
Subject   Re: st: Create a new variable based on the current observation and values of other observations in the same group
Date   Mon, 14 Oct 2013 17:16:43 +0100

Correction

local imax = r(max)
Nick
[email protected]


On 14 October 2013 16:53, Nick Cox <[email protected]> wrote:
> Using the approach indicated this could be
>
> clear
>
> input id      family    person   sex      age
>   1.         1          1          1         36
>   2.         1          2          1         16
>   3.         1          3          1         14
>   4.         2          1          0         45
>   5.         2          2          1         42
>   6.         2          3          0         14
>   7.         2          4          1         12
>   8.         2          5          0         10
>   9.         3          1          0         39
> 10.         3          2          1         36
> 11.         3          3          0         11
> 12.         3          4          1          9
> 13.         3          5          1          7
> 14.         3          6          1          3
> end
>
>
>
> bysort family (person) : gen Person = _n
> su Person, meanonly
> local imax = r(N)
>
> gen count = 0
> gen work = .
>
> qui forval i = 1/`imax' {
> by family: replace work = sum(sex == 1 & ((age[`i'] - age) > 10))
> by family: replace count = work[_N] if _n == `i'
> }
>
> drop work
> list, sepby(family)
>
> The approach is in some ways awkward compared with the -joinby-  and
> -collapse- magic shown by Robert Picard.
>
> But it has a certain directness as implementing
>
> initialise count = 0
>
> foreach family member {
>           count how many are sex 1 and ten years or more younger
>           replace count with result for that family member
> }
>
> Note that the loop is over family membership, not observations.
> Missing ages should be watched out for.
>
> Nick
> [email protected]
>
>
> On 13 October 2013 23:57, Huanhuan Shi <[email protected]> wrote:
>> Dear Statalist,
>>
>> I have a problem which is similar to but different from this post.
>> http://www.stata.com/support/faqs/data-management/creating-variables-recording-properties/
>>
>> I tried to modify the code suggested by Nicholas J. Cox but can not
>> figure it out. Hope I can get help from you.
>> The problem I am facing is as follows:
>>
>> First, the data structure is shown below. I have family groups and
>> individuals in each family group.
>>
>>         family    person   sex      age
>>   1.         1          1          1         36
>>   2.         1          2          1         16
>>   3.         1          3          1         14
>>
>>   4.         2          1          0         45
>>   5.         2          2          1         42
>>   6.         2          3          0         14
>>   7.         2          4          1         12
>>   8.         2          5          0         10
>>
>>   9.         3          1          0         39
>> 10.         3          2          1         36
>> 11.         3          3          0         11
>> 12.         3          4          1          9
>> 13.         3          5          1          7
>> 14.         3          6          1          3
>>
>>
>> What I want to do is to create a new variable "count" that count the
>> number of individual that sex is 1  and10 years younger than the
>> person within the same family. So the result should be like:
>>
>>
>>         family    person   sex      age      count
>>   1.         1          1          1         36           2
>>   2.         1          2          1         16           0
>>   3.         1          3          1         14           0
>>
>>   4.         2          1          0         45           1
>>   5.         2          2          1         42           1
>>   6.         2          3          0         14           0
>>   7.         2          4          1         12           0
>>   8.         2          5          0         10           0
>>
>>   9.         3          1          0         39           3
>> 10.         3          2          1         36           3
>> 11.         3          3          0         11           0
>> 12.         3          4          1          9            0
>> 13.         3          5          1          7            0
>> 14.         3          6          1          3            0
>>
*
*   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index