时间窗口内不同级别的分类变量的数量,按id

时间:2014-10-30 12:15:32

标签: stata

这是我正在努力解决的问题

我的数据看起来像

id time pcode
1  1    1    
1  2    1    
1  3    1    
1  4    2    
1  5    4    
1  6    1    

(我实际上有多个id;面板不是很平衡,实际上可能存在间隙,但这是我以后会保存的复杂功能)

pcode是一个分类变量(认为是产品代码),可能有很多(在50到500之间)。

我正在尝试使用时间窗口内pcode的唯一级别数生成变量。例如,对于两个和三个周期的窗口,我想分别生成两个变量ncode2ncode3,看起来像

id time pcode ncode2 ncode3
1  1    1     1      2
1  2    1     2      3
1  3    1     2      3
1  4    2     2      2
1  5    4     1      1
1  6    1     .      .

确定:time=1时,ncode2查看时间2和3;有时只有pcode有一级{2}和3(即1),所以ncode2=1。当time=2ncode2查看时间3和4时,会找到唯一值1和2,并记录ncode2=2。等等。

我不太关心当你开始到达小组结尾时会发生什么;在这里,我将值分配给ncode2ncode3,只要有一个时间段可以查看,如果没有,则会丢失。

1 个答案:

答案 0 :(得分:0)

我创建的变量包含面板中的下一个值,之后的那个,依此类推。

然后在egen包中应用rownvals()函数egenmore,该ssc函数必须使用. clear . input id time pcode id time pcode 1. 1 1 1 2. 1 2 1 3. 1 3 1 4. 1 4 2 5. 1 5 4 6. 1 6 1 7. 2 4 3 8. 2 5 4 9. 2 6 1 10. end . tsset id time panel variable: id (unbalanced) time variable: time, 1 to 6 delta: 1 unit . gen pcode1 = F.pcode (2 missing values generated) . gen pcode2 = F2.pcode (4 missing values generated) . gen pcode3 = F3.pcode (6 missing values generated) . egen distinct2 = rownvals(pcode1 pcode2) . egen distinct3 = rownvals(pcode1 pcode2 pcode3) . list, sepby(id) +--------------------------------------------------------------------+ | id time pcode pcode1 pcode2 pcode3 distin~2 distin~3 | |--------------------------------------------------------------------| 1. | 1 1 1 1 1 2 1 2 | 2. | 1 2 1 1 2 4 2 3 | 3. | 1 3 1 2 4 1 2 3 | 4. | 1 4 2 4 1 . 2 2 | 5. | 1 5 4 1 . . 1 1 | 6. | 1 6 1 . . . 0 0 | |--------------------------------------------------------------------| 7. | 2 4 3 4 1 . 2 2 | 8. | 2 5 4 1 . . 1 1 | 9. | 2 6 1 . . . 0 0 | +--------------------------------------------------------------------+ 进行安装。

egen

对于原则,相关技术在Distinct observations中有一定篇幅的讨论(它促使使用术语“不同”,而不是“唯一”)和Rowwise

此处使用的uniqrows()函数使用Mata函数{{1}}将向量缩减为一组不同的值,每个值只出现一次。