在我的数据中,我有一个字符串变量ICD9CODX
,如下所示:
|ICD9CODX|
|:-------|
|410 |
|411 |
|398 |
|196 |
我想在某些定义为Stata本地宏的代码集中搜索/匹配每个观察值。因此,如果代码属于某个集合,则会创建一个标记该集合的代码存在的变量,并将其设置为值1
,否则设置为0
。
我的本地宏的示例如下:
local cond_1 410 411
local cond_2 398 402 428
...
local cond_17 196 197 198 199
预期结果:
|ICD9CODX|condition_1|condition_2|........|condition_17|
|:-------|----------:|----------:|--------|-----------:|
|410 | 1| 0|........| 0|
|411 | 1| 0|........| 0|
|398 | 0| 1|........| 0|
|196 | 0| 0|........| 1|
我尝试使用下面的循环,但进行了0
实际更改:
forvalues i = 1/17 {
generate condition_`i' = 0
foreach dx in cond_`i' {
replace condition_`i' = 1 if strtrim(ICD9CODX) == "`dx'"
}
}
我的循环有什么问题吗?
跟踪循环。设置i
为1,然后
cond_`i'
成为
cond_1
和您的replace
命令将您的变量与它作为文字字符串进行比较。这是合法的,但如果不是变量的(修剪)值,则不会发生任何事情。对于其他cond_2
至cond_17
16种情况也是如此。
您应该写的与众不同:
forvalues i = 1/17 {
generate condition_`i' = 0
foreach dx of local cond_`i' {
replace condition_`i' = 1 if strtrim(ICD9CODX) == "`dx'"
}
}