数据说明:包含调查员 ID 和各种调查问题的答案。如果调查的答案之一是 99 或 999 或 9999(无穷无尽),那么这就是“否”的数字表示。如果调查的答案之一是 98 或 998 或 988、9988、998888 等,则用数字表示"is"。大多数数据都是整数形式。
我想将所有值以“9”开头并以“9”结尾的变量替换为“否”一词,以及所有以“9”开头并以“8”结尾的变量与"is"。
我当前的策略是将每个变量转换为字符串tostring_all,replace
然后迭代所有 string_vars
执行以下两个正则表达式:
regexr(`value', "^[9]*[9]$","No")
regexr(`value', "^[9]*[8]$", "Yes")
有没有一种更简单的方法可以做到这一点,而无需将所有值都转换为字符串?
最佳答案
如果你想检查全是9的数字变量,另一种方法是
... if subinstr(string(myvar, "%20.0f"), "9", "", .) == ""
其中 20 是上限,可替换为您需要的最长数字。
您可以使用findname
查找所有整数值变量(findit findname
表示下载源)。
findname, all(@==int(@)) local(intvars)
foreach v of local intvars {
gen s`v' = "YES" if subinstr(string(myvar, "%20.0f"), "9", "", .) == ""
}
可能是您想要的一部分。除了"is"和“否”之外还有其他答案吗?
关于regex - Stata:正则表达式搜索和替换整数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19092766/