[英]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:
collapse numper, by(stateID)
因为我有其他估计 duplicates drop hhid, force
您的问题甚至不要求使用if
进行sum()
,因此最好从头开始。
重建您的问题,这没有得到很好的解释,
你有家庭(标识符内为个人意见hhid
内的美国和哥伦比亚特区(标识的50个州) stateID
)。
您有一个可变的numper
,每个家庭的人数,并且想要每个州的平均值。
对一个家庭中的每个人重复观察,因此每个家庭仅需要使用一个观察。
您可以每个家庭标记一次
egen tag = tag(hhid)
平均值作为新变量为
egen avPersonHH = mean(numper/tag), by(stateID)
Stata将平均numper/tag
,分别为numper/1
和numper/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来为您计算平均值。
(最新信息)此代码会逐步引导您避免使用collapse
和duplicates
(未说明其理由)。 但是大多数经验丰富的Stata用户都乐于使用蛮力:
duplicates drop hhid, force
collapse numper, by(stateID)
然后merge
回去。 该解决方案不仅是直接的,而且使用的Stata细节较少,可能需要花费一些时间才能弄清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.