【问题标题】:Split panel into subpanels将面板拆分为子面板
【发布时间】: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/…我对你的问题几乎一无所知,因为我从来没有做过这种计算。

标签: split panel stata


【解决方案1】:

太长,无法放入评论空间:

问题报告的全部内容是代码“错误”。对于无法对您的数据(无法访问)进行尝试的任何人来说,这意味着什么?除非您提供可用的样本数据,即规模适中的完整数据集,并按照其术语一致地重写问题,否则我看不出您的问题对其他人有多大意义。

在这种情况下,使用这个用户编写的包的经验丰富的 Stata 程序员的数量确实会非常少,这使问题变得更加复杂。请注意,您之前的帖子没有收到任何答案,可能是出于类似的原因。

到目前为止,如此消极。

但我可以说,您打开的双循环将创建 72000 个新变量,即使其中大多数都是缺失值。不知何故,您知道您有 9 个行业,那么为什么要循环访问 1/9000?在不同的地方你说你想要

72 个新变量

72 * 7 个新变量

这些可能以某种方式保持一致,但我不知道如何。

第二个代码块不完整。

【讨论】:

  • 更不用说mahascore iteself 将创建额外的 576 个变量,如果 72 个 varlists 中的每一个都包含 8 个变量,如 OP 的示例所示。无法想象这会在大约 73,000 个变量的情况下非常顺利地运行。我很好奇 Stata OP 使用什么风格来允许超过 32767 个变量。
  • @ander2ed mahascore 在所有属性(7 个变量)上仅产生 1 个距离。所以我会得到 72 个变量,我可以(在理论上)将它们加起来为一个变量,因为 72 个变量将只包含特定年份-行业组合的值。
  • @Nick Cox 谢谢你的回答。不幸的是,我不知道如何改进我的代码并完全理解这个问题写得不好。我将尝试使用您的 cmets 对其进行改进。我希望它会有所帮助。
猜你喜欢
  • 2012-10-19
  • 2018-12-22
  • 2014-04-21
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2018-04-09
相关资源
最近更新 更多