2

我想遍历 ID 变量中的所有值,检查相应的变量“存在”是否包含 a.或零。如果.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,所以我就是这样想的。

有任何想法吗?

4

2 回答 2

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
于 2013-09-19T09:14:37.450 回答
1

这是另一种方法。

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

逐句解释:

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

如果 anyflag是 1 id,那么一切都应该是。

id未标记的不同值由 显示levelsof

!否定逻辑值,将 0 翻转为 1,反之亦然。

还有另一种方法:

   gen flag = present != 0 & present != .
   bysort id (flag) : replace flag = !flag[_N] 
   levelsof id if flag 
于 2013-09-19T14:22:57.627 回答