在Stata中将字符串转换为数字

时间:2013-12-06 16:16:49

标签: string stata

我在一个名为agen的变量中有个人年龄的调查数据。最初,变量是字符串,所以我使用encode命令将其转换为数字。当我尝试生成一个新的变量hhage时,引用了户主的年龄,生成的新变量是不一致的。

我使用的命令如下:

encode agen, gen(age) 
gen hhage=age if relntohrp==1

生成的新变量不一致,因为当我浏览它时:第一个houshehold中hh头的年龄是65,而生成的新数字是63.当我检查第二个家庭时,变量hhage报道28人而不是33人作为头部的头部。等等。

2 个答案:

答案 0 :(得分:2)

运行help encode,您可以阅读:

  

如果varname包含仅恰好存储的数字,请不要使用encode   作为字符串;相反,使用generate newvar = real(varname)destring;   见real()或[D] destring。

例如:

clear all
set more off

input id str5 age
1 "32"
2 "14"
3 "65"
4 "54"
5 "98"
end

list

encode age, gen(age2)
destring age, gen(age3)

list, nolabel

请注意使用encodedestring之间的区别。前者将数字代码(1,2,3,...)分配给字符串值,而destring将字符串值转换为数字。您可以在list

时看到剥离值标签
. list, nolabel

     +------------------------+
     | id   age   age3   age2 |
     |------------------------|
  1. |  1    32     32      2 |
  2. |  2    14     14      1 |
  3. |  3    65     65      4 |
  4. |  4    54     54      3 |
  5. |  5    98     98      5 |
     +------------------------+

简单listbrowse可能会让您感到困惑,因为encode会指定自然数字序列,但也会指定等于原始字符串的值标签:

. list

     +------------------------+
     | id   age   age3   age2 |
     |------------------------|
  1. |  1    32     32     32 |
  2. |  2    14     14     14 |
  3. |  3    65     65     65 |
  4. |  4    54     54     54 |
  5. |  5    98     98     98 |
     +------------------------+

nolabel选项显示“基础”数据。

您提到它不一致,但对于将来的问题,发布确切的输入和结果对于那些试图帮助您的人来说更有用。

答案 1 :(得分:0)

尝试查看this方法?听起来你可能已经在你的方法中滑倒了。