Stata的.如何使用sum()的if语句?

CHE*_*HKA 1 if-statement sum stata

我正在尝试执行以下代码:

    forval i = 1/51 {

    // number of households
    by hhid, sort: gen nvals = _n==1
    count if (nvals & stateID == `i')
    local stateTotalHH = r(N)

        local avPersonHH`i' = sum(numper)/`stateTotalHH' if(nvals & stateID ==`i')
        drop nvals 
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但if不允许sum().如何估算numper每个州和家庭层面变量中所有值的总和或总和 ?

PS:

  1. 我无法使用,collapse numper, by(stateID)因为我有其他估计
  2. 另外,我不能做以下事情: duplicates drop hhid, force

Nic*_*Cox 5

您的问题,甚至不要求sum()使用if,所以最好在一开始启动.

重建你的问题,这个问题没有得到很好的解释,

  1. hhid对美国50个州和哥伦比亚特区(标识符stateID)内的家庭内的个人(标识符)有观察结果.

  2. 你有一个变量numper,每个家庭的人数,你想要每个州的平均数.

  3. 对一个家庭中的每个人重复观察,因此每个家庭只需使用一次观察.

您可以标记每个家庭一次

  egen tag = tag(hhid) 
Run Code Online (Sandbox Code Playgroud)

作为新变量的平均值是

 egen avPersonHH = mean(numper/tag), by(stateID) 
Run Code Online (Sandbox Code Playgroud)

塔塔是要平均numper/tag哪些不同会numper/1numper/0; 后一个部门的失误将被忽略,这就是所需要的.

每个家庭都重复这个变量.要查看每个值stateID,

 tabdisp stateID, cell(avPersonHH) 
Run Code Online (Sandbox Code Playgroud)

您的代码有什么问题?以下是部分列表:

一个.不需要循环.

湾 如果是,则by hhid, sort: gen nvals = _n==1不应重复该陈述.

C.sum()是一个跨观察累积和的函数,而不是你想要的.

d.这条线

  local avPersonHH`i' = sum(numper)/`stateTotalHH' if(nvals & stateID ==`i')
Run Code Online (Sandbox Code Playgroud)

最好只计算一个数字,但if条件是错误的.if无论什么local......在Stata中经常有意义,但是iflocal定义的右边只有操纵包含命令的文本才有意义.

你对这一行的评论忽略了这些基本的误解,c.和d.

即 您的目标是在尽可能多的本地宏中收集51个平均值,但仍需要将它们放在有用的地方.

F.不需要单独计算总数和数字,因为您可以让Stata为您计算平均值.

(后来)此代码一步与你所厌恶的使用沿着步扮演collapseduplicates的理由未规定.但是大多数有经验的Stata用户都乐于使用蛮力:

   duplicates drop hhid, force 
   collapse numper, by(stateID) 
Run Code Online (Sandbox Code Playgroud)

然后merge回来.该解决方案不仅直接,而且使用较少的特殊Stata细节,这需要时间来弄清楚.