如何将包含非数字值的字符串转换为数值?

时间:2013-12-20 11:07:50

标签: string converter numeric stata

我有几个形式的变量:

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不喜欢变量包含分数的事实。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,那么字符串的解释就会产生一个,也可能是两个事实:

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

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

  3. 请注意

    • destringreal()的包装器,因此real()不是这种方式。

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

答案 1 :(得分:0)

您可以编写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) == ","
 }