Stata 删除冗余值标签
我有一个大数据集的一部分。许多变量包含值标签,但这部分数据集中不存在此类值。我想从数据集中删除多余的值标签。我尝试在斯塔塔使用各种方法来实现这一点,但没有成功 显然,这是行不通的:Stata 删除冗余值标签,stata,labels,Stata,Labels,我有一个大数据集的一部分。许多变量包含值标签,但这部分数据集中不存在此类值。我想从数据集中删除多余的值标签。我尝试在斯塔塔使用各种方法来实现这一点,但没有成功 显然,这是行不通的: label drop X if X == 1 补充文本:到目前为止,我提出了以下不完美的解决方案,因为我需要在将来一次又一次地重复这个练习: 第一种(半手动): 第二(X是需要保留的标签代码。问题是我有多个标签代码需要保留): “显然”没有:这不是法律规范,原则上也没有意义。至多标签放置放置命名标签,但是标签的名
label drop X if X == 1
补充文本:到目前为止,我提出了以下不完美的解决方案,因为我需要在将来一次又一次地重复这个练习:
第一种(半手动):
第二(X是需要保留的标签代码。问题是我有多个标签代码需要保留):
“显然”没有:这不是法律规范,原则上也没有意义。至多标签放置
放置命名标签,但是标签的名称和它们附加到的任何变量的名称并不一致,除非您以这种方式进行设置
这是可疑的:
追加
或合并
,您需要担心会发生什么。这可能会导致比你想要的更多的混乱解码
,然后根据这些值进行编码。但是,值标签不一定按所需的顺序排列。默认情况下,encode
将按字母顺序进行编码,最终会出现类似1“可接受”2“不好”3“好”或1“同意”2“不同意”3“中立”之类的废话。可以想象,最终得到的标签比开始时多
有其他的方法可以很好地做到这一点,但这只是一个小项目
执行摘要:对不起,这听起来不是个好主意
编辑:这是从dataex
中破解出来的。它应该适用于各种版本没有“明显”的说法:这不是法律规范,甚至在原则上也没有意义。至多标签放置
放置命名标签,但是标签的名称和它们附加到的任何变量的名称并不一致,除非您以这种方式进行设置
这是可疑的:
在大多数情况下,Stata不会使用大量内存来存储值标签。值标签的要点在于,值标签只需存储一次
这类问题似乎意味着,值标签是在您出现之前设置的,并且每个值可能会找到一个要坚持的观察值。这很可能是明智的想法
这是危险的:
相同的值标签可以用于多个变量,因此原则上需要检查是否在使用特定集合的所有变量上使用
如果使用类似的数据集进行追加
或合并
,您需要担心会发生什么。这可能会导致比你想要的更多的混乱
不那么刺耳,但也值得一提的是,数据中没有的值标签对于图形化目的可能仍然有用
所以,我不建议你怎么想。您可以尝试使用值标签对每个变量进行解码
,然后根据这些值进行编码。但是,值标签不一定按所需的顺序排列。默认情况下,encode
将按字母顺序进行编码,最终会出现类似1“可接受”2“不好”3“好”或1“同意”2“不同意”3“中立”之类的废话。可以想象,最终得到的标签比开始时多
有其他的方法可以很好地做到这一点,但这只是一个小项目
执行摘要:对不起,这听起来不是个好主意
编辑:这是从dataex
中破解出来的。亲爱的尼克,谢谢你的回答和建议。我完全理解您的担忧,但我不想再讨论为什么我需要去掉冗余(未使用)的值标签。今天我花了很多时间在这个问题上,但没有比一个一个半手动过程变量更好的解决方案了:fre-var;di r(实验室有效);标签下降变量;label define var“label 1”2“label 2”3“label 3”,修改。这是您的选择,但我不会花时间编写程序来实现一个坏主意。如果是这样,我认为这是值得解释的,这样您就知道这不是白做的。我需要以Excel格式和codebook分别向学生提供小数据集。有时,当某些变量的值标签大于500时,代码本非常长。这就是为什么对于用于教育目的的小型派生数据集,我需要通过删除冗余值标签来缩短代码本的原因。解释真正的问题使其更接近于解决问题。将您的数据集简化为示例数据集,然后运行dataex
生成input
和其他代码以复制它并保存
结果。Nick,感谢您为此投入时间。提供的程序正是我所需要的。亲爱的尼克,谢谢你的回答和建议。我完全理解您的担忧,但我不想再讨论为什么我需要去掉冗余(未使用)的值标签。我今天花了很多时间在这个问题上,但没有比pro更好的解决方案
fre var
di r(lab_valid);
label drop var;
label define var 1 "Label 1" 2 "Label 2" 3 "label 3", modify.
labellist var
local min = r(var_min)
local max = r(var_max)
forval i = `min'/`max' {
if `i' != X {
label define var `i' "", modify
}
}
*! 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