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

String 在Stata中将字符串转换为数字,string,stata,String,Stata,我在一个名为agen的变量中有个人年龄的调查数据。最初,变量是字符串,所以我使用encode命令将其转换为数字。当我试图生成一个涉及户主年龄的新变量时,生成的新变量不一致 我使用的命令如下: encode agen, gen(age) gen hhage=age if relntohrp==1 生成的新变量不一致,因为当我浏览它时:hh头在第一个小时的年龄是65岁,而生成的新数字是63岁。当我检查第二个家庭时,变量hhage报告housheold的户主是28而不是33。等等。试着看看这个方法

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

我使用的命令如下:

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

生成的新变量不一致,因为当我浏览它时:hh头在第一个小时的年龄是65岁,而生成的新数字是63岁。当我检查第二个家庭时,变量
hhage
报告housheold的户主是28而不是33。等等。

试着看看这个方法?听起来您可能在方法中的某个地方出错了。

运行
帮助编码
,您可以阅读:

如果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
注意使用
encode
destring
之间的区别。前者将数字代码(1,2,3,…)分配给字符串值,而
destring
将字符串值转换为数字。当您
列出
时,您会看到剥离值标签:

. 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 |
     +------------------------+
简单的
列表
浏览
可能会让您感到困惑,因为
编码
会分配自然数序列,但也会分配与原始字符串相等的值标签:

. 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
选项显示“基础”数据


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

@Roberto Ferrer的答案是正确的,我敢打赌。