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,他给出了另一个答案。