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 <njcoxstata@gmail.com>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
Subject   Re: st: Create a new variable based on the current observation and values of other observations in the same group
Date   Tue, 15 Oct 2013 00:27:00 +0100

Another correction. If it's 10 or more years younger the code should
say >= 10, not > 10.
Nick
njcoxstata@gmail.com


On 14 October 2013 17:16, Nick Cox <njcoxstata@gmail.com> wrote:
> Correction
>
> local imax = r(max)
> Nick
> njcoxstata@gmail.com
>
>
> On 14 October 2013 16:53, Nick Cox <njcoxstata@gmail.com> 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
>> njcoxstata@gmail.com
>>
>>
>> On 13 October 2013 23:57, Huanhuan Shi <huanhuanshi09@gmail.com> 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