面板数据中的重复序列

Repeat sequence in panel data

我正在处理 1970 年至 2005 年劳动生产率的面板数据,并将其定义为 xtset sector year。当我在基准年寻找固定权重的平均年生产率增长时,我试图将 1970 年的权重 (nominalshare) 复制到所有其他年份。请注意,顺序非常重要,因为不同的扇区具有不同的值。

我的代码如下:

egen totalva = sum(VA), by(year)
by sector: gen nominalshare = VA/totalva if year == 1970

手动复制权重不是一种选择,因为我有 35 年的观察结果并且我正在研究不同的基准年。

所以我试图将 1970 年的准确结果复制到以后的所有年份。有没有人知道如何解决这个问题?

您可以利用 egen 命令下的函数通常会忽略缺失值这一事实:

egen totalva = total(VA), by(year)
gen temp = VA/totalva if year == 1970

by sector: egen nominalshare = mean(temp)
drop temp

另请注意cond()函数的使用范围:

egen totalva = total(VA), by(year)
gen temp = cond(year == 1970, VA/totalva, 0)

by sector: egen nominalshare = max(temp)
drop temp

如果使用 do 文件,您还可以使用 tempvar 命令,这样就不需要 drop temp 行。

注意:此版本得益于@ander2ed 的评论。

我同意@lmo 的回答和@ander2ed 对 egen 的评论,但这是另一种方式,提供各种两行解决方案,因此更短。

请注意,虽然 egensum() 函数工作正常,但自 Stata 9 以来它一直没有记录:现在有一个等效的 total() 函数。这样做是为了更清楚地区别 Stata 函数 sum(),它产生累积或 运行 总和。

数据,甚至假数据,帮助。在 Statalist 上,人们被要求使用 dataex (SSC) 来列出示例数据,这在 Stack Overflow 上也是一个好主意。这是一些愚蠢的数据,因为我没有可从中提取的 OP 数据集:

clear 
input sector year va 
1  1970 40  
1  1971 70 
2  1970 60 
2  1971 30 
end 

关于问题:不用求总数再除以比例份额,我们可以直截了当。

egen pcva = pc(va), by(year) prop 

我们可以通过这种方式将 1970 年的值传播到所有其他年份:

egen pcva1970 = total(pcva * (year == 1970)), by(sector) 

list, sepby(sector) 

     +--------------------------------------+
     | sector   year   va   pcva   pcva1970 |
     |--------------------------------------|
  1. |      1   1970   40     .4         .4 |
  2. |      1   1971   70     .7         .4 |
     |--------------------------------------|
  3. |      2   1970   60     .6         .6 |
  4. |      2   1971   30     .3         .6 |
     +--------------------------------------+

total()可以以表达式为食,而不仅仅是变量名,表达式为pcva * (year == 1970)。当且仅当 year1970 时,真或假比较 year == 1970 产生 1,否则产生 0。效果是产生一个总数,该总数恰好是选定的值,并且它被放置在每个相关的观察中。

这里有两种忽略除 1970 值以外的所有值的方法:

egen pcva1970 = total(pcva / (year == 1970)), by(sector) 
egen pcva1970 = total(cond(year == 1970, pcva, .)), by(sector) 

与@lmo 的回答一样,这些解决方案都取决于 Stata 忽略大多数(不是全部!)目的的缺失。

http://www.stata-journal.com/sjpdf.html?articlenum=dm0055

上有对这种技术的评论

注意在这个特定的例子中,1970 年是第一年,所以这是另一个解决方案:

egen pcva = pc(va), by(year) prop 
bysort sector (year) : gen pcva1970 = pcva[1]