您的问题甚至不需要sum()
with if
,因此最好从头开始。
重构你的问题,没有很好的解释,
hhid
您对美国 50 个州和哥伦比亚特区(标识符)内的家庭(标识符)中的个人进行了观察stateID
。
您有一个变量numper
,即每个家庭的人数,并且您想要每个州的平均值。
对家庭中的每个人重复观察,因此每个家庭只需要使用一次观察。
您可以通过以下方式标记每个家庭一次
egen tag = tag(hhid)
作为新变量的平均值将是
egen avPersonHH = mean(numper/tag), by(stateID)
numper/tag
Stata将求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细节,这可能需要时间来弄清楚。