根据标签中的某些字符删除Stata中的观察结果

时间:2015-12-10 20:30:14

标签: stata

Stata是否有可能根据变量中是否包含某些字符来删除变量中的观察结果?例如,在sysuse auto中,如何删除foreign中以" ign"结尾的所有观察结果。这里的预期结果是所有观察结果归类为"外国" foreign变量中的内容将被删除。

我尝试将foreign转换为字符串(使用tostring foreign, replace),因此我可以使用drop if strmatch(foreign, "*ign*")==1,但这导致没有删除任何观察结果,因为foreign有值标签,转换为字符串时丢失。有什么想法吗?

1 个答案:

答案 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") 
}