假设我的数据集是auto.dta
因变量为price
自变量为rep78
控制变量为headroom weight length
回归模型为OLS,即主回归代码为reg rep78 headroom weight length
下面是1000次placebo test的代码
forvalue i=1/1000{sysuse auto,clear//调入数据*-思路:打乱rep78,即将rep78的全部取值拿出暂存,然后随机赋给每一个样本*-打乱rep78,即将rep78的全部取值拿出暂存 g obs_id=_n//初始样本序号gen random_digit=runiform()//生成随机数sort random_digit//按新生成的随机数排序g random_id=_n//产生随机序号preserve keep random_id rep78//保留虚拟的rep78rename rep78 random_rep78 rename random_id id//重命名为id,以备与其他变量合并(merge)label var id 原数据与虚拟处理变量的唯一匹配码 save random_rep78,replace restore drop random_digit random_id rep78//删除原来的rep78rename obs_id id//重命名为id,以备与random_rep78合并(merge)label var id 原数据与虚拟处理变量的唯一匹配码 save rawdata,replace*-合并,回归,提取系数userawdata,clear merge1:1id using random_rep78,nogen reg price random_rep78 headroom weight length g _b_random_rep78=_b[random_rep78]//提取x的回归系数g _se_random_rep78=_se[random_rep78]//提取x的标准误keep _b_random_rep78 _se_random_rep78 duplicates drop _b_random_rep78,force save placebo`i',replace//把第i次placebo检验的系数和标准误存起来}*-纵向合并1000次的系数和标准误useplacebo1,clearforvalue i=2/1000{append using placebo`i'//纵向合并1000次回归的系数及标准误}gen tvalue=_b_random_rep78/_se_random_rep78kdensity tvalue,xtitle("t值")ytitle("分布")saving(placebo_test)*-删除临时文件forvalue i=1/1000{erase placebo`i'.dta}*-mark:后续有时间再将它封装成程序【完】
文献范例
周茂、陆 毅、杜 艳、 姚 星,2018:《开发区设立于地区制造业升级》,《中国工业经济》第3期。
作者:虚童
链接:https://www.jianshu.com/p/bad7471ab73b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。