Stata 根据个人数据得出的住户属性
我想创建新变量Stata 根据个人数据得出的住户属性,stata,Stata,我想创建新变量HHage,它是HID报告的户主年龄。在数据集中,户主由P1编码。数据集如下所示: Personid HID Age P1 100 12 P2 100 45 P1 101 16 P1 102 35 P2 102 24 P3 102 26 我尝试了egen命令,但得到了一个与numlist相关的错误。我使用的命令是: egen
HHage
,它是HID报告的户主年龄。在数据集中,户主由P1
编码。数据集如下所示:
Personid HID Age
P1 100 12
P2 100 45
P1 101 16
P1 102 35
P2 102 24
P3 102 26
我尝试了egen
命令,但得到了一个与numlist相关的错误。我使用的命令是:
egen hhage = anyvalue(age), values(integer 1,2 to 26)
@Maarten Buis的优秀答案解释说,您可以在不使用
egen
的情况下完成这项工作。这个答案着重于使用egen
解决此类问题
什么是允许的numlist在这里是一个小问题;主要问题是egen
函数anyvalue()
帮助不大。其文件说明:
anyvalue(
varname),值(
integer numlist)
不能通过与组合。如果varname等于提供的numlist中的任何整数值,则取varname的值,否则将丢失该值
这将是合法的语法
egen hhage = anyvalue(age), values(1/26)
但斯塔塔会将年龄从1岁到26岁的孩子复制到新的变量中,而忽略其他的变量,一个一个地观察,不管家庭和谁是户主。那不是你想要的
一个egen
解决方案可能是
egen hhage = total(age * (Personid == "P1")), by(HHID)
表达式Personid==“P1”
的计算结果为true时为1,false时为0。因此,户主的年龄
出现在总数中,而年龄
的其他值被忽略,因为它们对总数的贡献为0
by()
选项未记录,但可以使用。Stata鼓励您这样做:
bysort HHID : egen hhage = tota(age * (Personid == "P1"))
此解决方案假定
Personid
是一个字符串变量。如果是数值变量,则表达式Personid==“P1”
应替换为类似Personid==1
的内容,使用1或任何其他合适的整数代码
每个家庭有一个户主。可以通过以下方式直接检查
egen hhcount = total(Personid == "P1"), by(HHID)
egen work = anyvalue(age) if Personid == "P1", values(0/200)
有关此领域的技术回顾,请参见
请注意,原则上你可以这样做
egen hhcount = total(Personid == "P1"), by(HHID)
egen work = anyvalue(age) if Personid == "P1", values(0/200)
允许任何年龄
可以想象的人只要是户主。然后你可以通过
egen hhage = total(work), by(HHID)
然而,我看不出这种解决办法有什么意义 来自@Maarten Buis的优秀答案解释说,您可以在没有egen
的情况下完成这项工作。这个答案着重于使用egen
解决此类问题
什么是允许的numlist在这里是一个小问题;主要问题是egen
函数anyvalue()
帮助不大。其文件说明:
anyvalue(
varname),值(
integer numlist)
不能通过
与组合。如果varname等于提供的numlist中的任何整数值,则取varname的值,否则将丢失该值
这将是合法的语法
egen hhage = anyvalue(age), values(1/26)
但斯塔塔会将年龄从1岁到26岁的孩子复制到新的变量中,而忽略其他的变量,一个一个地观察,不管家庭和谁是户主。那不是你想要的
一个egen
解决方案可能是
egen hhage = total(age * (Personid == "P1")), by(HHID)
表达式Personid==“P1”
的计算结果为true时为1,false时为0。因此,户主的年龄
出现在总数中,而年龄
的其他值被忽略,因为它们对总数的贡献为0
by()
选项未记录,但可以使用。Stata鼓励您这样做:
bysort HHID : egen hhage = tota(age * (Personid == "P1"))
此解决方案假定
Personid
是一个字符串变量。如果是数值变量,则表达式Personid==“P1”
应替换为类似Personid==1
的内容,使用1或任何其他合适的整数代码
每个家庭有一个户主。可以通过以下方式直接检查
egen hhcount = total(Personid == "P1"), by(HHID)
egen work = anyvalue(age) if Personid == "P1", values(0/200)
有关此领域的技术回顾,请参见
请注意,原则上你可以这样做
egen hhcount = total(Personid == "P1"), by(HHID)
egen work = anyvalue(age) if Personid == "P1", values(0/200)
允许任何年龄
可以想象的人只要是户主。然后你可以通过
egen hhage = total(work), by(HHID)
然而,我看不出这种解决办法有什么意义 我改了标题。在这里使用egen
的anyvalue()
函数只是分散注意力,因为它与问题没有实际关系。我更改了标题。在这里使用egen
的anyvalue()
函数只是分散注意力,因为它与问题没有实际关系。非常感谢@如果你想感谢我的朋友和合著者Maarten Buis,他给出了另一个答案,非常感谢@如果你想感谢我的朋友和合著者Maarten Buis,他给出了另一个答案。