重新编码在Stata中用字符串编码的缺失值

时间:2015-06-26 16:48:37

标签: stata

我有一个数据集,缺少值编码"缺少"。我如何重新编码这些,以便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"=. )

2 个答案:

答案 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()函数识别字符串变量的一个缺失值。