【发布时间】:2016-09-08 08:20:10
【问题描述】:
我在 Stata 中有一个面板数据集,其中包含行业和年份维度以及 7 个其他变量。我想按行业年组合将此面板拆分为子面板,然后使用来自mahapick.ado 包的mahascore 使用它们来计算新变量。
这是数据样本的结构(varlist的数字不是真实的,在我的数据集中它们只是一些数字变量):
firm_id year ind_id var1 var2 var3 var4 var5 var6 var 7
1 2008 1 1 2 3 4 5 6 7
1 2009 1 1 2 3 4 5 6 7
1 2010 1 1 2 3 4 5 6 7
.................................................................
2 2008 2000 1 2 3 4 5 6 7
2 2009 2000 1 2 3 4 5 6 7
2 2010 2000 1 2 3 4 5 6 7
...............................................................
对于这些变量中的每一个,我想生成 72 个新变量(9 个行业 * 8 年),因此不属于行业年组合的每个变量的所有值都将丢失。比我想生成 72 个 varlist,我将使用它们分别为每个行业年组合计算 mahascore(马氏距离)。行业 ID (ind_ids) 采用以下值 {1 2000 3000 4000 5000 6000 7000 8000 9000}。时间跨度从 2008 年到 2015 年。
我写的代码是错误的,但我希望它有助于理解我在做什么:
*Generate 504 variables(8 years*9 industries * 7variables):
forvalues i = 2008/2015 {
forvalues z = 1/9000 {
gen var1_`i'_`z'=var1 if year == `i' & ind_id == `z'
gen var2_`i'_`z'=var2 if year == `i' & ind_id == `z'
gen var3_`i'_`z'=var3 if year == `i' & ind_id == `z'
gen var4_`i'_`z'=var4 if year == `i' & ind_id == `z'
gen var5_`i'_`z'=var5 if year == `i' & ind_id == `z'
gen var6_`i'_`z'=var6 if year == `i' & ind_id == `z'
gen var7_`i'_`z'=var7 if year == `i' & ind_id == `z'
}
}
*Create 72 varlists (with 7 variables for each year-industry combination):
global varlist1 var1_2008_1 var2_2008_1 var3_2008_1 var4_2008_1 var5_2008_1 var6_2008_1 var7_2008_1
global varlist2 var1_2009_1 var2_2009_1 var3_2009_1 var4_2009_1 var5_2009_1 var6_2009_1 var7_2009_1
....................................................................
*Create list of lists
global metavarlist varlist1 varlist2...varlist72
*Calculate distance
foreach v in $metavarlist {
mahascore `v', gen(dist_M_`v') refmeans compute
也许有人可以在这里改进我的逻辑。
【问题讨论】:
-
正如已经指出的那样,
1/9000上的循环本身会创建 9000 个新变量。实际上,ind_id的值并没有内置限制。最简单的捷径是使用egen, group()将您的行业标识符映射到具有 9 个不同值 1 到 9 的变量。见stata.com/support/faqs/data-management/…我对你的问题几乎一无所知,因为我从来没有做过这种计算。