楼主: nickstick
1667 1

[Stata初级班] 请问老师,这个程序错在哪儿?非常感谢! [推广有奖]

  • 2关注
  • 0粉丝

已卖:1538份资源

讲师

49%

还不是VIP/贵宾

-

威望
0
论坛币
24710 个
通用积分
7.3699
学术水平
9 点
热心指数
9 点
信用等级
8 点
经验
19102 点
帖子
217
精华
0
在线时间
783 小时
注册时间
2007-1-15
最后登录
2025-12-28

楼主
nickstick 发表于 2011-12-26 20:16:49 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
老师您好!
    学生在改编一个程序,目的是在同行业、同年度中,寻找与原样本ROA在+-20%的配对样本(如果有多个符合条件的配对样本,则选择ROA最接近的),原样本的范围是fs1=1,配对样本的范围是fs1=0
      但是运行时,好像进入了死循环。程序如下:

// 生成模拟数据,非平衡面板数据
clear
set more off
set obs 1000
gen id = _n
gen indus = ceil(10*uniform())   // 10个行业
gen ROA = 100*exp(invnormal(uniform())) - 1
gen a001000000 = 100*exp(invnormal(uniform()))
gen control = 10*uniform()  // 控制变量,测试用
expand 5
drop if uniform() < 0.1  // 非平衡面板数据
bysort id: gen year = 2010 - _n
sort id year
by id: replace a001000000 = a001000000 * (1 + 0.1*uniform()) if _n > 1
tempfile befor_match //定义暂时性文件befor_match,表示配对之前的文件  
gen fs1 = cond(_n>200, 0, 1)
gsort -fs1
count if fs1==1
local num = r(N)
save "`befor_match'", replace

// 主程序
capture postclose match
   postfile match group id year dmatch using matchsample.dta, replace
   local total = _N
   local j = 0
   forval k = 1/`num' {  //定位原样本的范围
     forval i = `num'/`total' {  //定位配对样本的范围
        preserve
        local lid = id[`i'+1]
        local lyear = year[`i'+1]
        local lindus = indus[`i'+1]
        local lROA = ROA[`i'+1]
        local la001000000 = a001000000[`i'+1] //资产
        quietly keep if indus[`k'] == `lindus'
        quietly keep if year[`k'] == `lyear'
        gen assetratio = abs(a001000000[`k'] / `la001000000' - 1)
        quietly keep if assetratio <= 0.2
                // 将条件分成四句keep if ,有助于加快程序
        if _N < 1 {    //若没有一个公司满足条件,则直接进入下一循环
                restore
                continue
        }
        sort ROA  // 对ROA排序;如果对assetration排序,则是选取资产最接近的
        local mid = id[1]   //若有多个公司满足条件,则用ROA最接近的公司
        local j = `j' + 1
        post match (`j') (`lid') (`lyear') (0)
        post match (`j') (`mid') (`lyear') (1)
        restore
      }
   }
   postclose match
   use matchsample, clear
   sort id year
   merge id year using "`befor_match'"
   keep if _merge == 3
   drop _merge
   sort group dmatch
   label define ldmatch 0 "初始样本" 1 "配对样本"
   label value dmatch ldmatch
   list in 1/30

请问这个程序需要如何改正,才能达到预期目的?谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:非常感谢 postfile preserve Uniform Quietly control 程序 平衡 行业 样本

沙发
arlionn 在职认证  发表于 2011-12-27 10:33:17
你自己先要调试一下,找出最核心的问题,我最近很忙,无法帮你全程调试,望见谅。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 10:19