循环每一个价值观

时间:2015-09-03 20:47:18

标签: stata

我试图在变量中运行循环,并且不确定如何编写我的想法。所以,我有一个名为newid的变量,它是

newid
1
1
2
2
3
3

等等。

foreach x in newid2 {
    replace switchers = 1 if doc[_n] != doc[_n+1]
}

我想修改此代码,以便此代码将针对每两个值运行(在本例中为1和1,2和2运行)。修改此内容的最佳方法是什么?请帮帮我

1 个答案:

答案 0 :(得分:3)

这样的事情可以通过levelsof完成:

clear
input id str1 doc
1 "A"
1 "B"
2 "A"
3 "C"
3 "A"
end

gen switcher1 = 0

levelsof id

foreach i in `r(levels)' {
    quietly tab doc if id==`i'
    replace switcher1 = 1 if r(r)>1 & id==`i'
}

但是,你肯定有more efficient ways来实现你的目标。以下是标记切换医生的ID的一个示例:

ssc install egenmore
bysort id: egen num_docs = nvals(doc)
generate switcher2 = cond(num_docs>1,1,0)

潜在的想法是一样的。您可以计算每个ID的不同doc值的数量。如果该数字超过1,则id被标记为切换器。第二个版本可以说更有效率,因为它不涉及循环id的每个值。