2016-03-17 61 views
-1

我有一個看起來像數據如下:填寫前行的日期前一個月失蹤一行日期

行,COMPANY_NAME,date_adj
1,「紙製品有限公司」,
2, 「紙製品有限公司」
3, 「紙製品有限公司」
4中, 「紙製品有限公司」
5中, 「紙製品有限公司」
6中,「紙製品LTD 「,
7,」PAPER PRODUCTS LTD。「,
8中, 「紙製品有限公司」
9中, 「紙製品有限公司」
10, 「紙製品有限公司」
11, 「紙製品有限公司」
12,「紙製品LTD。 「31mar1990
13,」 紙製品有限公司 「
14,」 紙製品有限公司 「
15,」 紙製品有限公司 「
16,」 紙製品有限公司「
17,「PAPER PRODUCTS LTD。」,
18,「PAPER PRODUCTS LTD。」,
19,「PAPER P RODUCTS LTD。 「
20,」 紙製品有限公司 「
21,」 紙製品有限公司 「
22,」 紙製品有限公司 「
23,」 紙製品LTD。「,
24, 「紙製品LTD。」,31mar1991
25, 「紙製品有限公司」
26, 「紙製品有限公司」
27, 「紙製品LTD。」,

每一行代表公司和報告某些財務信息的日期。考慮第12行中的日期。我需要填寫date_adj下的第11行與上一個月和第年(date_adj下的第11行應該有1990-02-28)。我需要爲變量date_adj下的每一行執行此操作。所以下date_adj前十行應該像下面

行,date_adj
1,1989-04-31
2,1989-05-31
...
11,1990-02- 28
12,1990-03-31

我正在使用Stata來做到這一點。有什麼建議麼?

回答

2

目前還不清楚「上個月的日期」是什麼。例如,據我記憶,沒有4/31/1989。在這裏,我只減去30天。

/* Fake data */ 
clear 
input id str10 str_date 
1 "."  
1 "." 
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "." 
1 "."  
1 "1990-03-31" 
1 "."  
1 "." 
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "."  
1 "." 
1 "." 
1 "1991-03-31" 
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "1979-10-01" 
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "."  
2 "1980-10-01" 
end 

/* Get a Stata daily date */ 
gen stata_date = date(str_date,"YMD") 
format stata_date %td 

/* Sort each company backwards */ 
bys id: gen order = _n 
gsort id -order 

/* Fill dates down and resort back */ 
bys id: replace stata_date = stata_date[_n-1]-30 if missing(stata_date) 
sort id stata_date 
+0

謝謝!我澄清了我的問題。你的解決方案有效唯一的變化是使用31而不是30.對於上個月31march1990的情況,這種方式不會是01march1990,而是28feb1990。 – PollPenn

相關問題