我每次都是用同样的原始数据,一样的stata命令来处理数据,可是每次处理后的数据库居然是不一样的,这让我很苦恼,检查了好久发现数据是从egen mis=rowmiss(_all)drop if mis
这里开始不一致的,每次删除的记录数不同。drop if 报表类型 == "B"这个命令每次删除的记录数也不一样。求懂这个的老师同学们指点一下,真的谢谢了。下面我把我的stata命令贴出来。数据库在附件里。谢谢老师同学们
clear all
use "固定资产.dta "
///325133
merge m:n 证券代码 会计期间 using "纵向利润.dta " ,keep (match)
rename _merge m利润
merge m:n 证券代码 会计期间 using "纵向折旧.dta ",keep (match)
rename _merge m折旧
merge m:n 证券代码 会计期间 using "纵向投资.dta ",keep (match)
rename _merge m投资
merge m:n 证券代码 using "申万行业分类.dta ",keep (match)
rename _merge m基本情况
merge m:n 证券代码 using "企业状态.dta ",keep (match)
rename _merge m企业状态
//仅保留12月31日的数据
gen 年份=substr(会计期间,1,4)
gen 月份=substr(会计期间,6,2)
keep if 月份 == "12"
//和个股回报率数据合并
merge m:n 证券代码 年份 using "个股回报率.dta ",keep (match)
rename _merge m个股回报率
//和存贷款利率合并
merge m:n 年份 using "存贷款利率.dta ",keep (match)
rename _merge m存贷款利率
drop m*
//删除B股
drop if strmatch(证券代码,"200***")
drop if strmatch(证券代码,"900***")
//删除状态异常股:ST和*ST
keep if 戴帽摘帽时间 == ""
//删除非银金融和银行以及公用事业
drop if 所属行业 == "非银金融"
drop if 所属行业 == "公用事业"
drop if 所属行业 == "银行"
//删除那些上市时间晚于会计期间的数据
tostring year,force replace
drop if year>年份
rename 固定资产折旧油气资产折耗生产性生物资产折旧 折旧
rename 购建固定资产无形资产和其他长期资产支付的现金 构建
rename 处置固定资产无形资产和其他长期资产收回的现金净额 处置
//初步处理完毕
gen 投资=构建-处置
order 年份 证券代码 会计期间 固定资产净额 投资 营业总收入 ///
利润总额 所得税费用 构建 处置 报表类型
keep 年份 报表类型 固定资产净额 投资 短期借款 长期借款 ///
负债合计 折旧 营业总收入 利润总额 所得税费用 年个股总市值 ///
年个股流通市值 考虑现金红利再投资的年个股回报率 ///
不考虑现金红利再投资的年个股回报率 本年平均存款利率 本年平均贷款利率 所属行业
/*每次到这里的数据库还是一样的,但是接下来就不一样了*/
//删除所有含有缺失值的记录条(每次drop掉的记录不一样,每次的sum也不一样的)
egen mis=rowmiss(_all)
drop if mis
sum
//删除母公司报表类型((每次drop掉的记录不一样,每次的sum也不一样的))
drop if 报表类型 == "B"
sum
save 初步合并.dta, replace
附件列表