将存储在本地宏中的值与变量中的值相匹配

问题描述 投票:0回答:1

在我的数据中,我有一个字符串变量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'"
    }
}

我的循环有什么问题吗?

loops stata stata-macros
1个回答
1
投票

跟踪循环。设置i为1,然后

 cond_`i' 

成为

 cond_1 

和您的replace命令将您的变量与它作为文字字符串进行比较。这是合法的,但如果不是变量的(修剪)值,则不会发生任何事情。对于其他cond_2cond_17 16种情况也是如此。

您应该写的与众不同:

forvalues i = 1/17 {
    generate condition_`i' = 0
    foreach dx of local cond_`i' {
        replace condition_`i' = 1 if strtrim(ICD9CODX) == "`dx'"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.