我试图在变量中运行循环,并且不确定如何编写我的想法。所以,我有一个名为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运行)。修改此内容的最佳方法是什么?请帮帮我
答案 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的每个值。