Stata 用上一行日期前一个月的日期填写缺少的行
我有如下数据: 行、公司名称、日期调整Stata 用上一行日期前一个月的日期填写缺少的行,stata,Stata,我有如下数据: 行、公司名称、日期调整 1,“纸制品有限公司”, 2,“纸制品有限公司”, 3,“纸制品有限公司”, 4,“纸制品有限公司”, 5,“纸制品有限公司”, 6,“纸制品有限公司”, 7,“纸制品有限公司”, 8,“纸制品有限公司”, 9,“纸制品有限公司”, 10,“纸制品有限公司”, 11,“纸制品有限公司”, 12,“纸制品有限公司”,1990年3月31日 13,“纸制品有限公司”, 14,“纸制品有限公司”, 15,“纸制品有限公司”, 16,“纸制品有限公司”, 17,“纸
1,“纸制品有限公司”,
2,“纸制品有限公司”,
3,“纸制品有限公司”,
4,“纸制品有限公司”,
5,“纸制品有限公司”,
6,“纸制品有限公司”,
7,“纸制品有限公司”,
8,“纸制品有限公司”,
9,“纸制品有限公司”,
10,“纸制品有限公司”,
11,“纸制品有限公司”,
12,“纸制品有限公司”,1990年3月31日
13,“纸制品有限公司”,
14,“纸制品有限公司”,
15,“纸制品有限公司”,
16,“纸制品有限公司”,
17,“纸制品有限公司”,
18,“纸制品有限公司”,
19,“纸制品有限公司”,
20,“纸制品有限公司”,
21,“纸制品有限公司”,
22,“纸制品有限公司”,
23,“纸制品有限公司”,
24,“纸制品有限公司”,1991年3月31日
25,“纸制品有限公司”,
26,“纸制品有限公司”,
27,“纸制品有限公司” 每行代表一家公司和报告某些财务信息的日期。考虑第12行的日期。我需要在date_adj下的第11行填写上一个月和年份(date_adj下的第11行应该是1990-02-28)。我需要对变量date_adj下的每一行执行此操作。所以date_adj下的前十一行应该如下所示 行,日期调整
11989-04-31
21989-05-31
…
111990-02-28
121990-03-31 我用Stata来做这件事。有什么建议吗?不清楚“上个月的日期”是什么。例如,据我记忆所及,没有1989年4月31日。这里我只减去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
谢谢我已经澄清了我的问题。你的解决方案有效。唯一的改变是使用31而不是30。对于1990年3月31日的情况,上个月不是1990年3月1日,而是1990年2月28日。