虽然当事人大概来不及用了,但是我自己试着解决了问题。分享答案是为了希望别人不用像我一样头疼的调整代码。
原网站的代码是错误的,if的嵌套缺失了。部分行发生了错位。
http://www.360doc.com/content/17/1206/18/49194803_710565146.shtml
*** ind_id为行业细分比如 首字母SQP之类的
egen indid = group(ind_id)
***设定暂元
sum year
local yearnum2 = r(max)
local yearnum1 = r(min)
sum indid
local indnum1 = r(min)
local indnum2 = r(max)
***生成TFP变量空值
gen TFP =.
***此为循环公式,注意空格
***命令格式是year forval里嵌套一个ind forval再嵌套一个if三层,注意对齐。
forval year = `yearnum1'(1)`yearnum2'{
***第二行命令在开头插入一个tab
forval indid = `indnum1'(1)`indnum2'{
***第三行命令在开头插入两个tab 后续命令均插入两个tab
count if year == `year' & indid==`indid'
***计算要求各行业当年至少20个观测值,使用者也可以根据需要自行调节(可能造成较多的样本缺失,在回归时要注意)
if r(N) > 20{
regress lnS lnL lnK lnM if year == `year' & indid==`indid'
***这里 lnS为总销售额对数 lnL为员工数对数 lnK为总资产对数 lnM为现金流量表中用于获取物资和劳务的现金流支出,仅供参考。
***if条件满足计算残差值
predict temp if year == `year' & indid ==`indid', residual
***把计算好的残差值保存在变量tfp
replace TFP=temp if year == `year' & indid ==`indid'
drop temp
continue
}
***上一行命令空格仍为开头两个tab,下一行命令开头一个tab
}
***下一行命令开头无需空格,命令结束。
}
*** TFP_G为循环按行业和年份分组回归的结果
rename TFP TFP_G