我正在查看Stata的当前人口调查,尽管这个问题可以适用于任何具有个人权重的调查。
生成一个表格可以直接显示一个变量的平均值 - 比如工资 - 随着时间的推移给出个别权重:
table qtr [aw=pworwgt], contents(mean wage)
我想自动做的是显示工资的平均水平,但是某些类别的比例固定为某个日期。
例如,假设我有6个教育类别(低于HS,HS,某些学院,AA,BA / BS,Grad School)......如果我修好了,我想看看工资会有多大差异劳动力的教育比例,比如2005年的水平。
理想情况下,对于大型类别,解决方案不会占用大量资源。例如,我可能想要使用CPS的详细职业指标做类似的事情,该指标有数百个级别。
我的直觉告诉我“边缘”可能是解决方案的一部分,但我对该命令不够熟悉......此外,我希望能够生成表格输出,以便我可以在其他软件中绘图。
ETA:这是我尝试按年龄和性别来固定重量的方法:通过循环所有数据,将同期比例与基础四分之一比例进行比较,然后相应地调整个体权重。然而,这需要很长时间才能循环。
local start = tq(1994q1)
local end = tq(2014q4)
local base = tq(2006q1)
tempvar pop2006
tempvar cohort2006
tempvar poptemp
gen pworwgt_a = pworwgt
levelsof pesex, local(sex)
sum pworwgt if qtr == `base'
gen `pop2006' = r(N)*r(mean)
gen `cohort2006' = .
gen `poptemp' = .
forvalues age = 16/85 {
foreach s in `sex' {
sum pworwgt if age == `age' & pesex == `s' & qtr == `base'
replace `cohort2006' = r(N)*r(mean)/`pop2006'
forvalues q = `start'/`end' {
sum pworwgt if qtr == `q'
replace `poptemp' = r(N)*r(mean)
sum pworwgt if age == `age' & pesex == `s' & qtr == `q'
replace pworwgt_a = pworwgt_a*`cohort2006'/((r(N)*r(mean))/`poptemp') if age == `age' & pesex == `s' & qtr == `q'
}
}
}
答案 0 :(得分:1)
我没有测试范围,但这里建议简化代码段。我不解决我不理解的主要问题,部分原因是问题中没有对数据结构的精确描述。
总结建议:
在您需要的时候使用summarize, meanonly
并使用r(sum)
同上。
对常量使用标量而不是变量。
将重复计算转移到变量的一次性计算。我想你可以做更多的事情,但我会在这里停下来。
local start = tq(1994q1)
local end = tq(2014q4)
local base = tq(2006q1)
tempname pop2006 cohort2006
tempvar qassum qsum
// quarter-age-sex sums in a single variable
bysort qtr age pesex : gen double `qassum` = sum(pworwgt)
by qtr age pesex : replace `qassum` = `qassum`[_N]
// quarterly sums in a single variable
by qtr: gen double `qsum' = sum(pworwgt)
by qtr: replace `qsum` = `qsum'[_N]
gen pworwgt_a = pworwgt
levelsof pesex, local(sex)
sum pworwgt if qtr == `base', meanonly
scalar `pop2006' = r(sum)
forvalues age = 16/85 {
foreach s in `sex' {
sum pworwgt if age == `age' & pesex == `s' & qtr == `base', meanonly
scalar `cohort2006' = r(sum)/`pop2006'
replace pworwgt_a = pworwgt_a*`cohort2006'/`qassum'/`qsum' if age == `age' & pesex == `s'
}
}