楼主: 青青云游
4411 15

[其他] 请教怎么用stata挑comparables?很急! [推广有奖]

11
voodoo 发表于 2009-6-20 13:17:04
模拟了一个大数据库(sheet2),发现10楼的方法效率并不比8楼的高。
巫毒上传,必属佳品!
坛友下载,三思后行!

12
voodoo 发表于 2009-6-20 13:25:43
denver 发表于 2009-6-19 09:30
另外,有个问题:不知道preserve和restore在这里起什么作用,因为forvalue本身就是一个循环了,因此去掉preserve和restore对于结果应该没有影响。
明白denver的意思,对main改写如下,即无需preserve和restore(而且该方法比8楼的效率高,运行速度快——本来以为preserve是将数据preserve在内存中,然后从内存中restore,查阅manual后才发现是preserve到disk中,因此用preserve和restore还不如直接用use ..., clear):
// main
use sheet1, clear
local num = _N
forval i = 1/`num' {
        use sheet1, clear
        local name = name[`i']
        local class = class[`i']
        local weight = weight[`i']
        local year = year[`i']
        quietly use if class == "`class'" ///
                & weight <= `weight'+20 & weight >= `weight'-20                ///
                & year == `year' using sheet2, clear
        gen nameo = "`name'"
        // gen classo = "`class'"
        // gen weighto = `weight'
        // gen yearo = `year'
        append using comparables
        quietly save comparables, replace
}
use comparables, clear
list
巫毒上传,必属佳品!
坛友下载,三思后行!

13
denver 发表于 2009-6-21 23:03:45
我把曾经做过的一个项目中的部分数据传上来,也是配对样本选取问题,问题描述如下:

将样本以times=1(组一)和times>1(组二)分成两组,在组二中找出符合下列条件的样本与组一样本配对,:
1、组二的第15个变量(O列)在组一第15个变量的正负30%范围内;
2、组二的第12个变量(L列)在组一第12个变量的正负1范围内;
3、组后一个变量首字母相同;
4、time2中首4位(标识年度)正负1范围内

符合上述条件的样本保存在sheet1中,并分别标识0(组一)和1(组二)。

由于这个项目比较复杂,具体的我就不讲了,程序可以用VBA编辑器查看,代码没有经过优化,即能够实现基本目的就可以,所以还请各位拍砖。

现在从Voodoo这知道如何用stata处理了,以后就不用这么麻烦的VBA程序了,毕竟VBA跑起来非常的慢。

14
青青云游 发表于 2009-6-22 11:35:23
感谢各位牛牛了,VBA确实很慢,赶上大数据库,跑个程序要半天,多谢多谢!!
Enjoy everyday!

15
ajun685 发表于 2010-2-1 02:11:36
voodoo真牛,看这名字就知道是前辈高手了!
生于忧患,死于安乐。

16
StarNo1 发表于 2010-4-28 14:33:32
我把程序全部按照原样运行了一遍,为什么最后会出现“invalid syntax"错误啊?就在 } 下面一行

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-21 22:49