【问题标题】:How to convert a string containing non-numeric values into numeric values?如何将包含非数值的字符串转换为数值?
【发布时间】:2013-12-20 11:07:49
【问题描述】:

我有几个变量的形式:

1    gdppercap
2    19786,97
3    20713,737
4    20793,163
5    23070,398
6    5639,175

我已将数据复制粘贴到 Stata 中,它认为它们是字符串。到目前为止,我已经尝试过:

destring gdppercap, generate(gdppercap_n)

但得到

gdppercap contains nonnumeric characters; no generate

还有:

encode gdppercap, gen(gdppercap_n)

但无论之前的值如何,都会得到一个编号为 1 到 1055 的变量。

我也试过了:

gen gdppercap_n = real(gdppercap)

但是得到:

(1052 missing values generated)

你能帮帮我吗?据我所知,Stata 不喜欢变量包含分数的事实。

【问题讨论】:

    标签: string converter numeric stata


    【解决方案1】:

    如果我理解正确的话,字符串的解释源于一个甚至两个事实:

    1. 变量名可能会在第一次观察中回显。如果是这样,那是文本,它与数字变量不一致。根本问题可能是复制太多的复制粘贴操作。在通过复制和粘贴导入时,Stata 通常会为您提供一个选择,即您复制的第一行是被视为变量名还是数据,您需要第一个选择,以便列标题成为变量名,而不是数据。最好返回并正确进行复制和粘贴。但是,Stata 可能会在电子表格中处理多个标题行。或者,使用import excel,而不是复制粘贴。或者,drop in 1 删除第一个观察,前提是它始终是多余的。

    2. 逗号表示小数位。 destring 可以轻松应对:请参阅其dpcomma 选项的帮助。 Stata 不反对分数;那将是荒谬的。问题是您需要标记您对逗号的使用。

    注意

    • destringreal() 的包装,所以real() 不能解决这个问题。

    • encode 用于将真正的分类变量映射到整数,正如您所发现的,正如它的帮助所解释的那样。它不是用于修复数据输入错误。

    【讨论】:

      【解决方案2】:

      您可以编写一个 for 循环来将逗号转换为句点。我不太了解您的变量,但假设您有一个变量 gdppercap,其中包含 1234,343 之类的信息,并且您希望在执行 destring 之前将其设为 1234.343。

      例如:

      forvalues x = 1(1)10 {
         replace gdppercap = substr(gdppercap, 1, `x'-1) + "." + substr(gdppercap, `x'+1, .)    
         if substr(gdppercap, `x', 1) == ","
       }
      

      【讨论】:

      • 即使在需要时replace gdppercap = subinstr(gdppercap, ",", ".", 1) 也不需要循环。但这不是必需的; destring 有一个 dpcomma 选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多