没有“显然”:这不是法律法规,甚至在原则上也没有意义。充其量label drop 删除命名标签,但标签的名称和它们所附加的任何变量的名称不会重合,除非您以这种方式进行设置。
这是可疑的:
在大多数情况下,Stata 不会使用大量内存来存储值标签。价值标签的大部分意义在于价值标签只需要存储一次。
这种问题似乎暗示价值标签是在您出现之前设置的,并且每个值都可能会找到要坚持的观察结果。那很可能是明智的想法。
这很危险:
相同的值标签可能用于多个变量,因此原则上您需要检查使用特定集合的所有变量的使用情况。
如果您 append 或 merge 使用类似的数据集,您需要担心会发生什么。这可能会导致比你想要的更多的混乱。
不那么刺耳,但也值得一提的是,不在数据中的值标签可能仍可用于图形目的。
所以,我不建议你在想什么。您可以尝试使用带有值标签的每个变量的decode,然后根据这些值尝试encode。但价值标签不一定是理想的顺序。默认情况下,encode 会使用字母顺序,你会得到像 1 "Acceptable" 2 "Bad" 3 "Good" 或 1 "Agree" 2 "Disagree" 3 "Neutral" 这样的废话。可以想象最终得到的标签比开始时要多。
还有其他方法可以正确地做到这一点,但这是一个小项目。
执行摘要:抱歉,但这听起来不是一个好主意。
编辑:这是从dataex 中窃取的。它应该适用于
*! 1.0.0 NJC 11apr2018
program showvaluelabelsused
version 15
syntax [varlist]
quietly ds, has(vallabel)
foreach v in `r(varlist)' {
local l : value label `v'
local vlabels : list vlabels | l
}
foreach vl in `vlabels' {
local alllevels
qui ds , has(vallabel `vl')
local vlist `r(varlist)'
foreach v in `vlist' {
qui levelsof `v', local(levels) missing
local alllevels : list alllevels | levels
dis as res "label values `v' `vl'"
}
foreach n in `alllevels' {
local ltext : label `vl' `n', strict
if `"`ltext'"' != "" {
if strpos(`"`ltext'"',char(34)) dis as res `"label def `vl' `n' `"`ltext'"', modify"'
else dis as res `"label def `vl' `n' "`ltext'", modify"'
}
}
}
end
. sysuse auto, clear
(1978 Automobile Data)
. showvaluelabelsused
foreign
label values foreign origin
label def origin 0 "Domestic", modify
label def origin 1 "Foreign", modify
. keep if foreign
(52 observations deleted)
. showvaluelabelsused
label values foreign origin
label def origin 1 "Foreign", modify
. webuse nlswork, clear
(National Longitudinal Survey. Young Women 14-26 years of age in 1968)
. showvaluelabelsused
label values race racelbl
label def racelbl 1 "white", modify
label def racelbl 2 "black", modify
label def racelbl 3 "other", modify
. keep if race == 2
(20,483 observations deleted)
. showvaluelabelsused
label values race racelbl
label def racelbl 2 "black", modify