Stata是否有可能根据变量中是否包含某些字符来删除变量中的观察结果?例如,在sysuse auto
中,如何删除foreign
中以" ign"结尾的所有观察结果。这里的预期结果是所有观察结果归类为"外国" foreign
变量中的内容将被删除。
我尝试将foreign
转换为字符串(使用tostring foreign, replace
),因此我可以使用drop if strmatch(foreign, "*ign*")==1
,但这导致没有删除任何观察结果,因为foreign
有值标签,转换为字符串时丢失。有什么想法吗?
答案 0 :(得分:3)
您只需使用decode
:
clear all
sysuse auto
decode foreign , gen(foreignstr)
drop if strmatch(foreignstr, "*ign")
请注意,如果您希望" ign"中的 end 字符串,则可以省略strmatch()
函数中的第二个星号。
虽然此问题不是必需的,但请注意您可以使用Stata的本地宏扩展功能访问和使用值标签 - 请参阅help extended_fcn
。
此方法的一个示例:
clear all
sysuse auto
levelsof foreign , local(levs)
foreach l of local levs {
local val : label `: value label foreign' `l'
drop if foreign == `l' & strmatch("`val'", "*ign")
}