我在一个名为agen
的变量中有个人年龄的调查数据。最初,变量是字符串,所以我使用encode
命令将其转换为数字。当我尝试生成一个新的变量hhage
时,引用了户主的年龄,生成的新变量是不一致的。
我使用的命令如下:
encode agen, gen(age)
gen hhage=age if relntohrp==1
生成的新变量不一致,因为当我浏览它时:第一个houshehold中hh头的年龄是65,而生成的新数字是63.当我检查第二个家庭时,变量hhage
报道28人而不是33人作为头部的头部。等等。
答案 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
请注意使用encode
和destring
之间的区别。前者将数字代码(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 |
+------------------------+
简单list
或browse
可能会让您感到困惑,因为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方法?听起来你可能已经在你的方法中滑倒了。