使用前一行中日期前一个月的日期填写缺失行

时间:2016-03-17 19:50:35

标签: stata

我的数据如下所示:

行,COMPANY_NAME,date_adj
1,“纸制品有限公司”,
2,“纸制品有限公司”,
3,“纸制品有限公司”,
4,“纸制品有限公司”,
5,“纸制品有限公司”,
6,“纸制品有限公司”,
7,“纸制品有限公司”,
8,“纸制品有限公司”,
9,“纸制品有限公司”,
10,“纸制品有限公司”,
11,“纸制品有限公司”,
12,“PAPER PRODUCTS LTD。”,31mar1990
13,“纸制品有限公司”,
14,“纸制品有限公司”,
15,“纸制品有限公司”,
16,“纸制品有限公司”,
17,“纸制品有限公司”,
18,“纸制品有限公司”,
19,“纸制品有限公司”,
20,“纸制品有限公司”,
21,“纸制品有限公司”,
22,“纸制品有限公司”,
23,“纸制品有限公司”,
24,“PAPER PRODUCTS LTD。”,31mar1991
25,“纸制品有限公司”,
26,“纸制品有限公司”,
27,“纸制品有限公司”,

每行代表公司以及报告某些财务信息的日期。考虑第12行中的日期。我需要在date_adj下用前一个月和年份填写第11行(date_adj下的第11行应该是1990-02-28)。我需要为变量date_adj下的每一行执行此操作。所以date_adj下的前11行应该如下所示

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

我正在使用Stata来做到这一点。有什么建议吗?

1 个答案:

答案 0 :(得分: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