楼主: nklilei
2869 9

[编程问题求助] 请教高手一个stata编程问题 [推广有奖]

  • 2关注
  • 1粉丝

本科生

42%

还不是VIP/贵宾

-

威望
0
论坛币
824 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
792 点
帖子
38
精华
0
在线时间
144 小时
注册时间
2011-10-3
最后登录
2014-10-18

楼主
nklilei 发表于 2013-9-16 11:28:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教高手一个stata编程问题:

有这样一个数据
变量包括
community(社区id)
person 个人id
income 个人收入
age 年龄

如何计算每个社区里与每个人年龄差距在5年之内(+-5年)其他人的平均收入?

二维码

扫码加我 拉你入群

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

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

关键词:stata编程 Stata tata 请教高手 Community person 如何

沙发
dxystata 发表于 2013-9-16 13:02:03
可以编程实现,但这样做的意义何在?

藤椅
nklilei 发表于 2013-9-16 13:29:36
想看其他人的一些个体特征,对某个人主观感受的影响,因为比较总是选择与自己相似的人进行的,比如:年龄差不多的,或者受教育程度差不多的人?

板凳
McvLJY 发表于 2013-9-18 14:08:20
你好,这个问题我觉得我可以试试看,可否将数据(或者部分数据也可以)发给我?我对照着数据做个程序试试。

报纸
xiaofengshen 发表于 2013-9-24 07:30:24
示意数据见附件。相应程序如下:

gen ave=.
lab var ave "average income (+/-5yrs) within community"
   
foreach c in 1 2 3 {
    qui count if community==`c'
    local nobs`c'=r(N)
   
    forval i=1/`nobs`c'' {
        qui sum age if person==`i' & community==`c'
        local age`i'`c'=r(mean)
        qui sum income if person==`i' & community==`c'
        local income`i'`c'=r(mean)   
        }     

    forval i=1/`nobs`c'' {
        local sum=0
        local count=0
        forval j=1/`nobs`c'' {
            if (`age`j'`c''>=`age`i'`c''-5) & (`age`j'`c''<=`age`i'`c''+5) & (`j'!=`i') {
                local sum=`sum'+`income`j'`c''
                local count=`count'+1
                }
            else {
                local sum=`sum'
                local count=`count'
                 }
                }
          replace ave=`sum'/`count' if person==`i' & community==`c'
          }   
}

地板
McvLJY 发表于 2013-9-24 08:55:52
根据楼上的示意数据我也编了个程序,希望能对楼主有帮助:

gen ls = .
gen ave = .

forvalues i = 1/34{
  drop ls
  gen ls = .


  forvalues j = 1/34{
    local comm = community[`i']
    if community[`j'] == `comm' & abs(age[`j']-age[`i'])<=5 & `j' != `i'{
          qui kgjc ls 1
          local kg = r(ls)
          replace ls = income[`j'] in `kg'
        }
  }
  qui sum ls
  local m = r(mean)
  dis `m'
  replace ave = `m' in `i'
}

7
McvLJY 发表于 2013-9-24 08:57:36
如果楼主要用上面这段程序的话里面还牵涉到一个自编的子程序,楼主可先运行一下这个子程序再运行上面那个:

capture program drop kgjc
program define kgjc, rclass
version 8.0

args varname1 varname2 varname3

local x = 1
while `x' <= _N{
if missing(`varname1'[`varname2'*(`x'-1)+1]){
*dis 2*`x'-1
local y = `varname2'*(`x'-1)+1
local x = 2*_N
}
local x = `x'+1
}
dis `y'

return scalar `varname1' = `y'

end
exit

8
nklilei 发表于 2013-9-24 14:12:03
万分感谢,,人大经济论坛高人就是多啊,呵呵。

另外再请教一个合并数据的问题
有两个数据:一个是企业层面shuju1.dta包括变量dm qymc ylai cname hydm kgsj gyzcz gyzjz gdzchj,一个是国家层面数据shuju2.dta包括变量cname overallscore zhuchengfen chayi
通过cname国家名称合并。
企业层面数据包含的企业都是准备在某一个国家投资的企业,国家层面的数据是相应的制度因素。
我需要把这两个数据合并成如下结构
合并并生成一个变量ofdi,如果第1个企业在第a,e国投资,则设为1,那么第1个企业没有投资的b、c、d、f等国设为0。
同样,如果第2个企业在acd国投资,则设为1,那么第2个企业没有投资的ebf等国则设为0,以此类推。
每个企业的变量dm qymc ylai cname hydm kgsj gyzcz gyzjz gdzchj在不同的abcdef等国家保持一致。

数据合并成shuju3.dta

数据见附件,多谢

institution.rar

6.82 KB

本附件包括:

  • shuju2.dta
  • shuju3.dta
  • shuju1.dta

9
xiaofengshen 发表于 2013-9-25 19:52:23
我不会处理stata中文字符的情况。如果cname是代码而不是中文字符串的话,对shuju1先用tsset把数据设成panel,然后用tsfill。然后再和shuju2 merge.

10
voodoo 发表于 2013-9-25 20:51:05
xiaofengshen 发表于 2013-9-24 07:30
示意数据见附件。相应程序如下:

gen ave=.
为什么要那么复杂呢?难道我理解错了?!(应该没错,答案是一样的,:-))
gen ave = .
forv i = 1/`=_N' {
        qui su income if community == community[`i'] & inrange(age, age[`i']-5, age[`i']+5), meanonly
        replace ave = (r(sum)-income[`i'])/(r(N)-1) in `i'
}












巫毒上传,必属佳品!
坛友下载,三思后行!

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

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