我有一个数据集,缺少值编码"缺少"。我如何重新编码这些,以便Stata将它们识别为缺失值?当我有数字缺失值时,我一直在使用例如:
$ cat tst2.awk
/^active-address/ { prtRec() }
{ rec = rec $0 ORS }
END { prtRec() }
function prtRec() {
if (rec != "") {
rec = rec (rec~/host-name/ ? "" : "host-name=\"-\"\n")
sub(/^[^=]+=/,"",rec) # tweak 1: remove leading "...="
gsub(/\n[^=]+=/,",",rec) # tweak 2: change every "\n...=" to ","
printf "%s", rec
rec = ""
}
}
$ awk -f tst2.awk file
192.168.10.1,XX:XX:XX:XX:XX:XX,"oXXXXX"
192.168.10.2,XX:XX:XX:XX:XX:XX,"ZXXXXX"
192.168.10.3,XX:XX:XX:XX:XX:XX,"OXXXXX"
192.168.10.4,XX:XX:XX:XX:XX:XX,"AXXX"
192.168.10.5,XX:XX:XX:XX:XX:XX,"-"
192.168.10.6,XX:XX:XX:XX:XX:XX,"TXXXX"
然而,当我在其中运行一个字符时,例如:
mvdecode _all, mv(99=. )
我收到错误 mvdecode _all, mv("missing"=. )
。
答案 0 :(得分:4)
mvdecode
适用于数字变量仅:帮助中的横幅为"将数字值更改为缺失值" (重点补充)。因此错误消息应该有意义:字符串"missing"
当然不是数值,因此Stata会阻止您。根据您的要求,向Stata说数字值"missing"
应该更改为系统缺失是没有意义的。
至于你应该做什么,这取决于你在Stata术语中的意思是编码 "missing"
。
如果你引用的是带有文字值"missing"
的字符串变量,它应该只用空字符串""
替换,那么这将是所有字符串变量的循环:
ds, has(type string)
quietly foreach v in `r(varlist)' {
replace `v' = "" if `v' == "missing"
}
如果您指的是有值标签"missing"
的数字变量,那么您需要找到相应的数值并在mvdecode
的调用中使用它。使用label list
查找值和值标签之间的关联。
答案 1 :(得分:2)
mvdecode
适用于 numlists ,而非字符串(在help mvdecode
中明确说明)。 Stata中字符串的缺失值由""
表示。
clear
set more off
*----- example dataset -----
sysuse auto
keep make mpg
keep in 1/5
replace make = "missing" in 2
list
*----- what you want -----
ds, has(type string)
foreach var in `r(varlist)' {
replace `var' = "" if `var' == "missing"
}
list
list if missing(make)
您可以验证Stata现在使用missing()
函数识别字符串变量的一个缺失值。