我试图通过一个变量运行一个循环,不确定如何编码我的想法。因此,我有一个名为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运行)。修改它的最好方法是什么?请帮帮我
发布于 2015-09-04 05:04:55
这样的事情可以用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来实现你的目标。下面是一个标记切换医生的ids的示例:
ssc install egenmore
bysort id: egen num_docs = nvals(doc)
generate switcher2 = cond(num_docs>1,1,0)潜在的想法是相同的。计算每个id的doc的不同值的个数。如果该数字超过1,则将该id标记为switcher。第二个版本可以说更有效,因为它不需要遍历id值的每个值。
https://stackoverflow.com/questions/32385147
复制相似问题