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:
collapse numper, by(stateID)因为我有其他估计duplicates drop hhid, force您的问题,甚至不要求sum()使用if,所以最好在一开始启动.
重建你的问题,这个问题没有得到很好的解释,
您hhid对美国50个州和哥伦比亚特区(标识符stateID)内的家庭内的个人(标识符)有观察结果.
你有一个变量numper,每个家庭的人数,你想要每个州的平均数.
对一个家庭中的每个人重复观察,因此每个家庭只需使用一次观察.
您可以标记每个家庭一次
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/1和numper/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中经常有意义,但是if在local定义的右边只有操纵包含命令的文本才有意义.
你对这一行的评论忽略了这些基本的误解,c.和d.
即 您的目标是在尽可能多的本地宏中收集51个平均值,但仍需要将它们放在有用的地方.
F.不需要单独计算总数和数字,因为您可以让Stata为您计算平均值.
(后来)此代码一步与你所厌恶的使用沿着步扮演collapse和duplicates的理由未规定.但是大多数有经验的Stata用户都乐于使用蛮力:
duplicates drop hhid, force
collapse numper, by(stateID)
Run Code Online (Sandbox Code Playgroud)
然后merge回来.该解决方案不仅直接,而且使用较少的特殊Stata细节,这需要时间来弄清楚.