I want to create the lag of a variable with one caveat. If it is missing, I want to use the previous period's value etc. So it is the most frequent non-missing lag. Any ideas?
-
Login or Register
- Log in with
. webuse grunfeld, clear
. tsset company year
Panel variable: company (strongly balanced)
Time variable: year, 1935 to 1954
Delta: 1 year
. replace invest = . if year == 1937
(10 real changes made, 10 to missing)
. gen prev_invest = L.invest
(20 missing values generated)
. list year *invest if company == 1
+--------------------------+
| year invest prev_i~t |
|--------------------------|
1. | 1935 317.6 . |
2. | 1936 391.8 317.6 |
3. | 1937 . 391.8 |
4. | 1938 257.7 . |
5. | 1939 330.8 257.7 |
|--------------------------|
6. | 1940 461.2 330.8 |
7. | 1941 512 461.2 |
8. | 1942 448 512 |
9. | 1943 499.6 448 |
10. | 1944 547.5 499.6 |
|--------------------------|
11. | 1945 561.2 547.5 |
12. | 1946 688.1 561.2 |
13. | 1947 568.9 688.1 |
14. | 1948 529.2 568.9 |
15. | 1949 555.1 529.2 |
|--------------------------|
16. | 1950 642.9 555.1 |
17. | 1951 755.9 642.9 |
18. | 1952 891.2 755.9 |
19. | 1953 1304.4 891.2 |
20. | 1954 1486.7 1304.4 |
+--------------------------+
. bysort company (year) : replace prev_invest = prev_invest[_n-1] if missing(prev_invest)
(10 real changes made)
. list year *invest if company == 1
+--------------------------+
| year invest prev_i~t |
|--------------------------|
1. | 1935 317.6 . |
2. | 1936 391.8 317.6 |
3. | 1937 . 391.8 |
4. | 1938 257.7 391.8 |
5. | 1939 330.8 257.7 |
|--------------------------|
6. | 1940 461.2 330.8 |
7. | 1941 512 461.2 |
8. | 1942 448 512 |
9. | 1943 499.6 448 |
10. | 1944 547.5 499.6 |
|--------------------------|
11. | 1945 561.2 547.5 |
12. | 1946 688.1 561.2 |
13. | 1947 568.9 688.1 |
14. | 1948 529.2 568.9 |
15. | 1949 555.1 529.2 |
|--------------------------|
16. | 1950 642.9 555.1 |
17. | 1951 755.9 642.9 |
18. | 1952 891.2 755.9 |
19. | 1953 1304.4 891.2 |
20. | 1954 1486.7 1304.4 |
+--------------------------+
Comment