繁体   English   中英

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

[英]Stata. How to use if statement with sum()?

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

    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

您的问题甚至不要求使用if进行sum() ,因此最好从头开始。

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

  1. 你有家庭(标识符内为个人意见hhid内的美国和哥伦比亚特区(标识的50个州) stateID )。

  2. 您有一个可变的numper ,每个家庭的人数,并且想要每个州的平均值。

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

您可以每个家庭标记一次

  egen tag = tag(hhid) 

平均值作为新变量为

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

Stata将平均numper/tag ,分别为numper/1numper/0 后一个部门的缺失将被忽略,这是需要的。

对每个家庭重复该变量。 要仅查看每个stateID一个值,

 tabdisp stateID, cell(avPersonHH) 

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

一种。 无需循环。

b。 如果是这样,则by hhid, sort: gen nvals = _n==1的语句不应重复。

C。 sum()是用于跨观察的累计和的函数,不是您想要的。

d。 线

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

最多只能计算一个数字,但是if条件放错了位置。 if在Stata中通常使用local ..., if放在local定义的右边仅对处理包含命令的文本有意义。

您在此行的评论缺少这些基本的误解,c。 d。

e。 您的目标是在许多本地宏中收集51个平均值,但仍需要将它们放在有用的位置。

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

(最新信息)此代码会逐步引导您避免使用collapseduplicates (未说明其理由)。 但是大多数经验丰富的Stata用户都乐于使用蛮力:

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

然后merge回去。 该解决方案不仅是直接的,而且使用的Stata细节较少,可能需要花费一些时间才能弄清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM