我正在尝试识别数据集中的观测值 观测值没有相应值标签的变量。
例如,如果我有此变量var
:
1. Category 1
2. 2
3. Category 3
4. Category 4
5. Category 5
6. 6
如何解决上述问题?
我不希望更改使用label define
命令可以执行的值标签。
答案 0 :(得分:3)
这实际上取决于您“识别”的意思。
考虑以下玩具示例:
clear
set obs 6
generate var1 = _n
generate var2 = _n
generate var3 = _n
label define var1label 1 "Cat 1" 3 "Cat 3" 4 "Cat 4" 5 "Cat 5"
label define var2label 2 "Cat 2" 4 "Cat 4" 6 "Cat 6"
label define var3label 1 "Cat 1" 2 "Cat 2" 3 "Cat 3" 4 "Cat 4" 5 "Cat 5" 6 "Cat 6"
label values var1 var1label
label values var2 var2label
label values var3 var3label
list, separator(0)
+-----------------------+
| var1 var2 var3 |
|-----------------------|
1. | Cat 1 1 Cat 1 |
2. | 2 Cat 2 Cat 2 |
3. | Cat 3 3 Cat 3 |
4. | Cat 4 Cat 4 Cat 4 |
5. | Cat 5 5 Cat 5 |
6. | 6 Cat 6 Cat 6 |
+-----------------------+
如果您只想显示几个变量的值,最简单的方法
是要安装并使用SSC中的社区贡献命令labellacking
(Nick Cox,Robert Picard):
ssc install labellacking
然后,您可以简单地执行以下操作:
labellacking var*
var1 2 6
var2 1 3 5
现在,如果需要标记以供以后使用,则必须 循环所有相关变量,并使用宏提取信息 扩展功能:
ds var*
foreach var in `r(varlist)' {
generate `var'label = 0
local varlabel : value label `var'
if "`varlabel'" != "" {
levelsof `var', local(foo)
foreach val of local foo {
local labelval : label (`var') `val', strict
if "`labelval'" == "" {
replace `var'label = 1 if `var' == `val'
}
}
}
}
list, abbreviate(10) separator(0)
+-----------------------------------------------------------+
| var1 var2 var3 var1label var2label var3label |
|-----------------------------------------------------------|
1. | Cat 1 1 Cat 1 0 1 0 |
2. | 2 Cat 2 Cat 2 1 0 0 |
3. | Cat 3 3 Cat 3 0 1 0 |
4. | Cat 4 Cat 4 Cat 4 0 0 0 |
5. | Cat 5 5 Cat 5 0 1 0 |
6. | 6 Cat 6 Cat 6 1 0 0 |
+-----------------------------------------------------------+
list var1 if var1label == 1
+------+
| var1 |
|------|
2. | 2 |
6. | 6 |
+------+
list var2 if var2label == 1
+------+
| var2 |
|------|
1. | 1 |
3. | 3 |
5. | 5 |
+------+