您的问题甚至不需要sum()with if,因此最好从头开始。
重构你的问题,没有很好的解释,
hhid您对美国 50 个州和哥伦比亚特区(标识符)内的家庭(标识符)中的个人进行了观察stateID。
您有一个变量numper,即每个家庭的人数,并且您想要每个州的平均值。
对家庭中的每个人重复观察,因此每个家庭只需要使用一次观察。
您可以通过以下方式标记每个家庭一次
egen tag = tag(hhid)
作为新变量的平均值将是
egen avPersonHH = mean(numper/tag), by(stateID)
numper/tagStata将求numper/1平均值 numper/0后一个部门的缺失将被忽略,这是想要的。
每个家庭都重复该变量。要查看每个 的一个值stateID,
tabdisp stateID, cell(avPersonHH)
你的代码有什么问题?以下是部分列表:
一个。不需要循环。
湾。如果是,则by hhid, sort: gen nvals = _n==1不应重复该声明。
C。sum()是跨观测值的累积和的函数,而不是您想要的。
d。线
local avPersonHH`i' = sum(numper)/`stateTotalHH' if(nvals & stateID ==`i')
最多只能计算一个数字,但if条件错位了。if无论如何local......在Stata中通常是有意义的,但是放在定义if的右边local只对操作包含命令的文本有意义。
您对这一行的评论错过了这些基本的误解,c。和 d。
e. 您的目标是在尽可能多的本地宏中收集 51 个平均值,但仍需要将它们放在有用的地方。
F。不需要单独计算总数和数字,因为您可以让 Stata 为您计算平均值。
collapse(稍后)这段代码随着您对使用and的反感一步一步地发挥作用duplicates,没有说明其理由。但是大多数有经验的 Stata 用户会很乐意使用蛮力:
duplicates drop hhid, force
collapse numper, by(stateID)
然后merge回来。该解决方案不仅直接,而且使用较少的特殊Stata细节,这可能需要时间来弄清楚。