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

时间:2013-06-14 05:25:14

标签: 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 
}

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

ps:

  1. 我无法使用collapse numper, by(stateID)因为我有其他估算
  2. 另外,我无法执行以下操作:duplicates drop hhid, force

1 个答案:

答案 0 :(得分:5)

您的问题甚至没有sum() if,因此最好从头开始。

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

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

  2. 您有一个变量numper,每个家庭的人数,以及您想要的每个州的平均值。

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

  4. 您可以通过

    标记每个家庭一次
      egen tag = tag(hhid) 
    

    作为新变量的平均值为

     egen avPersonHH = mean(numper/tag), by(stateID) 
    

    Stata的平均值为numper/tag,其不同的是numper/1numper/0;后一个部门的失误将被忽略,这就是所需要的。

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

     tabdisp stateID, cell(avPersonHH) 
    

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

    一个。不需要循环。

    湾如果是,则不应重复声明by hhid, sort: gen nvals = _n==1

    ℃。 sum()是观察结果累积总和的函数,而不是您想要的。

    d。这条线

      local avPersonHH`i' = sum(numper)/`stateTotalHH' if(nvals & stateID ==`i')
    

    最多会计算一个数字,但if条件是错误的。 if无论local ...在Stata中通常都有意义,但将if放在local定义的右侧只对操纵包含命令的文本有意义。

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

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

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

    (LATER)此代码一步一步播放,您厌恶使用collapseduplicates,其理由尚未说明。但是大多数有经验的Stata用户都乐于使用蛮力:

       duplicates drop hhid, force 
       collapse numper, by(stateID) 
    

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