全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
9824 4
2014-10-09
先谢过各位!
目前在研究 不同人群的潜在结婚对象问题。 例如,年龄为a的样本,其潜在对象为年龄a+-5的异性;教育程度为大学本科的样本,其潜在对象为教育程度初中—博士的异性。

假设有数据如下:_n  age  educ  sex
1     20   3高中   1
2     25   4大学   2  
3     40   4大学   1  
4     30   1小学   1
5     28   4大学   1
6     25   3高中   2
7     40   3高中   2

现在要建立一个新变量 _c,表示潜在结婚对象的人数。
以样本编号为2的女性为例,在该样本中,其潜在对象为样本编号 1 和 5,其余人均因不同原因不满足要求。所以,_c=2
以样本编号为3的男性为例,在该样本中,其潜在对象为样本编号 7       ,其余人均因不同原因不满足要求。所以,_c=1

这个问题让我很困扰,不知如何下手。

我的思路是,先建立一串虚拟变量,如 for_age25 和 for_age40,用来指明从年龄上看满足要求的样本。再建立一串,如for_educ4,用来指示满足教育要求的对象。建立完成后,数据如下:

_n  age  educ  sex  for_age25  for_age40    for_educ4  
1     20   3高中   1        1                0                1
2     25   2初中   2        1                0                1
3     40   4大学   1        0                1                1
4     35   2初中   1        0                1                1
5     28   4大学   1        1                0                1
6     25   2小学   2        1                0                0

7     40   3高中   2        0                1                1

于是,_c等于若干虚拟变量均为1的观测值的数量。

求一段代码求 _c
(目前在想能不能用 egen anycount 来处理)
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-9 13:30:50
gen _c=0

forvalues i=1/7 {

forvalues j=1/7 {

if (abs(age(`i')-age(`j'))<=5 & sex(`i')!=sex(`j')) {
replace _c=_c+1 in `i'
}

}

}
二维码

扫码加我 拉你入群

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

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

2014-10-9 16:14:56
ermutuxia 发表于 2014-10-9 13:30
gen _c=0

forvalues i=1/7 {
谢谢,你的代码确实能解决问题。
不过,我现在手头数据观测值有100万以上,这样对每一个样本逐一累加,运行起来会不会很慢?
二维码

扫码加我 拉你入群

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

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

2014-10-10 09:31:29
woshizhu99 发表于 2014-10-9 16:14
谢谢,你的代码确实能解决问题。
不过,我现在手头数据观测值有100万以上,这样对每一个样本逐一累加,运 ...
没关系,你最好使用配置比较高的电脑运行程序
二维码

扫码加我 拉你入群

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

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

2014-10-10 14:19:50
ermutuxia 发表于 2014-10-10 09:31
没关系,你最好使用配置比较高的电脑运行程序
直接按照这个算法来,I7笔记本大概要跑半个月。。。

不过依旧按照你的思路,改良了下算法,已经达成目的。不过还是算了十几个小时。
不知道有没有更高效的算法来进行计数。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群