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 16:53:45 +0100

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