楼主: 青青云游
4419 15

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

  • 0关注
  • 0粉丝

本科生

22%

还不是VIP/贵宾

-

威望
0
论坛币
3137 个
通用积分
0.0623
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
875 点
帖子
68
精华
0
在线时间
55 小时
注册时间
2005-10-7
最后登录
2015-6-13

楼主
青青云游 发表于 2009-6-17 00:46:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大虾们帮帮忙啊。
有两个spreadsheet, 第一个里面是样本, 第二个里面是comparables.
比如:
sheet 1
姓名 班级 体重 出生年份
小明 一班 100   1990
小红 二班 120   1989
小强 一班  180   1990


sheet 2
姓名 班级 体重 出生年份
小刚 一班 200   1990
小一 一班 190    1990
小二 一班 120   1990
小三 二班  110   1990
小四 一班 110    1990
小五 二班 130   1989
根据sheet 1从sheet 2里面挑样本,挑出同班、同年出生且同重量级(+/-20)的同学,比如输出结果如下:
姓名 班级 体重 出生年份
小明 一班 100   1990
小二 一班 120   1990
小四 一班 110    1990

小红 二班 120   1989
小五 二班 130   1989

小强 一班  180   1990
小刚 一班 200   1990
小一 一班 190    1990
二维码

扫码加我 拉你入群

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

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

关键词:comparables Comparable arable Stata comp 小三 姓名 样本

沙发
sungmoo 发表于 2009-6-17 12:40:05
这里有个问题:

如果sheet1中A体重160,B体重180;而sheet2中C体重170(其他条件相同),那么C与A并还是与B并?

藤椅
sungmoo 发表于 2009-6-17 12:41:20
最好把你的两个数据库帖出来,针对数据库设计命令。

板凳
青青云游 发表于 2009-6-18 01:09:09
数据库太大了,如果是您说的那种情况,C于A和B各并一次
Enjoy everyday!

报纸
denver 发表于 2009-6-18 09:37:07
这是一个非常具有普适性的问题,搞公司金融和产业组织的人都会遇到这样的问题,就是配对样本的选取问题。以前我的解决办法是用VBA编个程序,用Excel运行,但显然速度有些慢,期待着哪位牛人出手相助。

地板
蓝色 发表于 2009-6-18 10:03:08
数据大,你可以拿出部分数据,

7
voodoo 发表于 2009-6-18 22:31:17
denver 发表于 2009-6-18 09:37
这是一个非常具有普适性的问题,搞公司金融和产业组织的人都会遇到这样的问题,就是配对样本的选取问题。以前我的解决办法是用VBA编个程序,用Excel运行,但显然速度有些慢,期待着哪位牛人出手相助。
这确实是一个非常具有普适性的问题!能否贡献一下你的vba程序和部分数据呢?也让我们学习借鉴。
巫毒上传,必属佳品!
坛友下载,三思后行!

8
voodoo 发表于 2009-6-18 23:51:54
一个基本满足要求的程序:

// input sheet1 and sheet2
clear
input str4 name str4 class weight year
        小明 一班 100   1990
        小红 二班 120   1989
        小强 一班  180   1990
end
save sheet1, replace

clear
input str4 name str4 class weight year
        小刚 一班 200   1990
        小一 一班 190    1990
        小二 一班 120   1990
        小三 二班  110   1990
        小四 一班 110    1990
        小五 二班 130   1989
end
save sheet2, replace

// create blank comparables.dta
clear
gen str4 name = ""
gen str4 class = ""
gen weight = .
gen year = .
gen str4 nameo = ""
// gen str4 classo = ""
// gen weighto = .
// gen yearo = .
save comparables, replace


// main
use sheet1, clear
local num = _N
preserve
forval i = 1/`num' {
        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
        restore, preserve
}

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

9
denver 发表于 2009-6-19 09:30:46
voodoo 乃牛人也,学习了。下周我把我的VBA程序整理下也放上来,供大家批评。
只是在几个gen那不应该有//
另外,有个问题:不知道preserve和restore在这里起什么作用,因为forvalue本身就是一个循环了,因此去掉preserve和restore对于结果应该没有影响。

10
voodoo 发表于 2009-6-20 11:44:45
denver 发表于 2009-6-19 09:30
voodoo 乃牛人也,学习了。下周我把我的VBA程序整理下也放上来,供大家批评。
只是在几个gen那不应该有//
另外,有个问题:不知道preserve和restore在这里起什么作用,因为forvalue本身就是一个循环了,因此去掉preserve和restore对于结果应该没有影响。
denver坛友过奖了,我也是Stata的爱好者和学习者而已。若干程序语句加上//只是认为该语句没太大必要。尽管在循环中,preserve和restore应该是必要的。

若sheet2是个大数据库,8楼的程序可能效率低了点,对main部分改进如下(将sheet2直接调入内存中,所以sheet2也不能太大了;若sheet2大于你Stata数据所能使用的内存,用8楼的程序)——只能算是可能的“改进”,因为没有大数据库可供试验:

// main
use sheet1, clear
local num = _N
// set memory ???.m
use sheet2, clear
preserve
forval i = 1/`num' {
        quietly use in `i' using sheet1, clear
        local name = name[1]               // 因为只有一个obs,甚至可以用local name = name,速度会快一点点,下同
        local class = class[1]
        local weight = weight[1]
        local year = year[1]
        restore, preserve
        quietly keep if class == "`class'"                 ///
                & weight <= `weight'+20 & weight >= `weight'-20                ///
                & year == `year'
        gen nameo = "`name'"
        // gen classo = "`class'"
        // gen weighto = `weight'
        // gen yearo = `year'
        append using comparables
        quietly save comparables, replace
}
use comparables, clear
list
巫毒上传,必属佳品!
坛友下载,三思后行!

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

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