在行之间添加观察值

时间:2019-02-08 12:59:46

标签: stata

我想创建以下新观察值:

A   B   C
1   1   1
1   2   2
1   3   4
1   4   5
1   5   2
2   1   1
2   2   5
2   3   3
2   4   3
*3* 1   .
*3* 2   .
*3* 3   .
*3* 4   .
*3* 5   .
4   1   4
4   2   3
4   3   1

新行用星号表示。

如何为变量AB创建新观测值?

2 个答案:

答案 0 :(得分:4)

这是一个简单的expand

clear

input A   B   C
1   1   1
1   2   2
1   3   4
1   4   5
1   5   2
2   1   1
2   2   5
2   3   3
2   4   3
4   1   4
4   2   3
4   3   1
end

generate id = _n
expand 6 if id == 10

replace id = 11 if _n == _N
replace A = 3 if id == 10
replace C = . if id == 10

bysort id: replace B = cond(_n == 1, 1, B[_n-1]+1) if id == 10

这将产生所需的输出:

list, sepby(A)

     +----------------+
     | A   B   C   id |
     |----------------|
  1. | 1   1   1    1 |
  2. | 1   2   2    2 |
  3. | 1   3   4    3 |
  4. | 1   4   5    4 |
  5. | 1   5   2    5 |
     |----------------|
  6. | 2   1   1    6 |
  7. | 2   2   5    7 |
  8. | 2   3   3    8 |
  9. | 2   4   3    9 |
     |----------------|
 10. | 3   1   .   10 |
 11. | 3   2   .   10 |
 12. | 3   3   .   10 |
 13. | 3   4   .   10 |
 14. | 3   5   .   10 |
     |----------------|
 15. | 4   1   4   11 |
 16. | 4   2   3   11 |
 17. | 4   3   1   12 |
     +----------------+

答案 1 :(得分:0)

代码可能会更短。

   SELECT DISTINCT so.name
    FROM syscomments sc
    INNER JOIN sysobjects so ON sc.id=so.id
    WHERE sc.TEXT LIKE '%your table name%'