String 如何将包含非数值的字符串转换为数值?
我有几个形式的变量:String 如何将包含非数值的字符串转换为数值?,string,converter,numeric,stata,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 以及: 但是,不
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
以及:
但是,不管前面的值是多少,都要得到一个编号为1到1055的变量
我也试过:
gen gdppercap_n = real(gdppercap)
但是你可以得到:
(1052 missing values generated)
你能帮我吗?据我所知,Stata不喜欢变量包含小数的事实。您可以编写for循环将逗号转换为句点。我不太了解您的变量,但假设您有一个变量
gdppercap
,其中包含类似1234343的信息,您希望在执行析构函数之前将其设置为1234.343
例如:
forvalues x = 1(1)10 {
replace gdppercap = substr(gdppercap, 1, `x'-1) + "." + substr(gdppercap, `x'+1, .)
if substr(gdppercap, `x', 1) == ","
}
如果我理解正确,字符串的解释来自一个或两个事实:
变量名可能会在第一次观察中重复出现。如果是这样,那就是文本,它与数值变量不一致。根本问题可能是复制和粘贴操作复制了太多内容。通过复制和粘贴导入时,Stata通常会让您选择是否将复制内容的第一行视为变量名还是数据,并且您需要第一个选择,以便列标题成为变量名,而不是数据。最好返回并正确地进行复制和粘贴。但是,Stata可能会在电子表格中处理多个标题行。或者,使用导入excel
,而不是复制粘贴。或者,放入1
删除第一个观察值,前提是它始终是多余的
逗号表示小数位destring
可以很容易地解决这个问题:查看帮助中的dpcomma
选项。斯塔塔对分数没有异议;那将是荒谬的。问题是您需要标记逗号的使用
注意
destring
是real()
的包装,因此real()
不是解决这个问题的方法
encode
用于将真正的分类变量映射到整数,正如您所发现的,它的帮助确实解释了这一点。它不用于修复数据输入错误
即使在需要时替换gdppercap=subinstr(gdppercap,“,”,“,”,1)
也会使循环变得不必要。但它不是必需的destring
有一个dpcomma
选项。
forvalues x = 1(1)10 {
replace gdppercap = substr(gdppercap, 1, `x'-1) + "." + substr(gdppercap, `x'+1, .)
if substr(gdppercap, `x', 1) == ","
}