对所有ID变量值进行Stata迭代,从另一个变量中添加值

时间:2013-09-19 08:43:19

标签: stata

我想迭代ID变量中的所有值,检查相应的变量“present”是否包含.或零。如果ID的所有值都存在.或零,我想将该ID附加到列表中。当循环结束时,我想查看该列表中的所有ID。

这是一些不起作用的伪代码

egen group = group(pupid)
su group, meanonly

local presentCapture 0 

forvalues i = 1/`r(max)' {
    foreach `id' in group {
      {
        if pres == 0 OR '.'  {
                  presentCapture = presentCapture + 1
            }
      }
    if presentCapture = 6 {
        list.append(`id')

}

display list

这显然没有做任何事 - 我已经习惯了Python,所以我这样想。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

// some example data
clear
input id present
1 1
1 .
2 0
2 0
3 .
3 .
4 0
4 1
5 0
5 .
end

// for each id count the number of obs
// with present == 0 or present == .
sort id
by id: egen mark = total(inlist(present,0,.))
list, sepby(id)

// mark ids were all obs are either 0 or .
by id: replace mark = (mark == _N)
list, sepby(id)

// create your list of ids
levelsof id if mark == 1

答案 1 :(得分:1)

这是另一种方法。

   gen flag = !inlist(present, 0, .) 
   bysort id (flag) : replace flag = flag[_N] 
   levelsof id if !flag 

声明解释说明:

flag是除0或缺失之外的任何值的指示符。

如果flag的任何id为1,那么一切都应该是id

levelsof显示未标记的!的不同值。

gen flag = present != 0 & present != . bysort id (flag) : replace flag = !flag[_N] levelsof id if flag 否定逻辑值,将0翻转为1,反之亦然。

另一种方法:

{{1}}