全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
10822 28
2009-07-02
又是panel data,有id,year, mv(market value)三个变量,分别代表公司号,年份,市场价值
先gsort year -mv,然后对每一年应用egen c=cut(mv), group(10),也就是对每一年的市场价值分成10组,每组的公司数量相同
但是这个命令不能和by一起用,我就像到了用egen c=cut(mv) if year==#, group(10),对每一年都用一次上述命令
可是显示出错,所以想问问大家有解决方法吗?
二维码

扫码加我 拉你入群

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

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

全部回复
2009-7-2 21:10:30
*不知以下可否实现目标?(酌情可去掉eq选项)
gsort year -mv
by year: cumul mv, g(group) eq
replace group=int(group*10)+1
recode group (11=10)
二维码

扫码加我 拉你入群

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

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

2009-7-2 23:26:41
sungmoo 发表于 2009-7-2 21:10
*不知以下可否实现目标?(酌情可去掉eq选项)
gsort year -mv
by year: cumul mv, g(group) eq
replace group=int(group*10)+1
recode group (11=10)
谢谢版主,问题基本上能解决。
但衍生出一个问题,因为mv精度不大,比较粗糙,造成某个相同的值(比如说1百万MV的公司有很多家),在这些相同值的情况下,cumulative distribution是怎么确定的,因为不是按照从大到小的顺序排列,这就造成了一个潜在的问题。执行完倒数第二条命令(replace group=int(group*10)+1),有的组里面会出现其他的值,比如第9组会出现10这样的值,而且似乎是没有规律
二维码

扫码加我 拉你入群

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

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

2009-7-2 23:33:00
*如果公司的次序不重要,可以去掉eq项。试一下下面:

gsort year mv
by year: cumul mv, g(group) eq
replace group=int(group*10)+1
recode group (11=10)
二维码

扫码加我 拉你入群

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

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

2009-7-2 23:35:19
cumul x
即计算变量x的样本(累积)分布。
(有eq项,同样的取值累积概率相同;否则,同样的取值累积概率不同)
二维码

扫码加我 拉你入群

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

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

2009-7-3 09:26:10
sungmoo 发表于 2009-7-2 23:35
cumul x
即计算变量x的样本(累积)分布。
(有eq项,同样的取值累积概率相同;否则,同样的取值累积概率不同)
问题解决了,不用eq选项,虽然一个在mv相同的情况下会出现和那个组值不同的值,但是如果执行完命令,再输入gsort year -group,每个group的值数目还是一样的。谢谢版主的关心
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:09:51
voodoo 发表于 2009-7-5 12:06我也想到了这一点了,但个人认为用egen可免去忘记recode这一不直观的步骤(相信很多人不用br是想不到)。
这只是涉及对“末位值”的处理吧。

你不用recode只用replace也可以实现这个过程。

另外,egen过程更耗时吧?
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:09:54
sungmoo 发表于 2009-7-5 12:02
voodoo 发表于 2009-7-5 11:55 viewsource cumul.ado 发现:by year: cumul mv, g(group) 就等于by year: gen group = _n/_N。当然cumul命令可增加很多options,功能更加强大。
这里还有一个细节:使用cumul x,可以事先不对x排序。
命令cumul x在执行时帮你sort了,所以也不能减少耗时。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:11:44
确实,往往我们要寻求的是程序直观可读性和执行效率之间的权衡。当然也有例外:帖子http://www.pinggu.org/bbs/thread-451864-1-1.html中sungmoo所提出的方法就比“变连乘为连加”的方法要好。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:14:27
voodoo 发表于 2009-7-5 12:09 命令cumul x在执行时帮你sort了,所以也不能减少耗时。
这里就涉及一个问题了:你用stata既有命令组(自编程序)实现某一任务,与stata命令自己(stata内在程序)实现该任务,哪个更省时?

cumul x完成后,可以不改变数据原先排列的顺序吧。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:16:26
voodoo 发表于 2009-7-5 12:11 确实,往往我们要寻求的是程序直观可读性和执行效率之间的权衡。
这里又涉及一个问题:与执行时间相比,“可读性”可能是一个相对的概念,或者说,是因人而异的。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:26:49
sungmoo 发表于 2009-7-5 12:14
这里就涉及一个问题了:你用stata既有命令组(自编程序)实现某一任务,与stata命令自己(stata内在程序)实现该任务,哪个更省时?
个人认为假如cumul 也是.do或.ado文件的话(正是.ado文件),同一语句cumul的执行时间应该和我们.do命令的执行时间是一样——除非是Stata的build_in command,如summarize。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:31:09
sungmoo 发表于 2009-7-5 12:16
这里又涉及一个问题:与执行时间相比,“可读性”可能是一个相对的概念,或者说,是因人而异的。
可读性确实因人而异,但关键是“普通的”Stata学习者如何理解你程序的可读性——这应该是个客观标准。
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:36:57
voodoo 发表于 2009-7-5 12:31 可读性确实因人而异,但关键是“普通的”Stata学习者如何理解你程序的可读性——这应该是个客观标准。
那么,一个命令,有多“普通”,才可以由“普通的”学习者理解呢?学习者有多“普通”,才算“普通”呢?

这有客观标准吗?
二维码

扫码加我 拉你入群

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

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

2009-7-5 12:39:18
voodoo 发表于 2009-7-5 12:11 确实,往往我们要寻求的是程序直观可读性和执行效率之间的权衡。当然也有例外:帖子http://www.pinggu.org/bbs/thread-451864-1-1.html中sungmoo所提出的方法就比“变连乘为连加”的方法要好。
我不太明白:它“例外”的意义指什么。

如果从我个人的“直观”的意义上说,“连加法”更直观。
二维码

扫码加我 拉你入群

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

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

2009-7-5 13:46:15
sungmoo 发表于 2009-7-5 12:36
voodoo 发表于 2009-7-5 12:31 可读性确实因人而异,但关键是“普通的”Stata学习者如何理解你程序的可读性——这应该是个客观标准。
那么,一个命令,有多“普通”,才可以由“普通的”学习者理解呢?学习者有多“普通”,才算“普通”呢?

这有客观标准吗?
用“普通的”这个词也许太普通了,应该用经济学中“代表性”(representative)这一词也许更恰当、更学术化一点。“代表性的Stata学习者”! :-)

至于“客观标准”,我想假如我们能从Stata学习者中抽取一个100人的随机样本,然后让它们对两段程序的可读性进行评价,假如60个人认为sungmoo程序的可读性比voodoo的强,那么我们是否可以以0.10 的显著性水平(双侧pr=0.056888)拒绝“原假说H0: Stata学习者认为两段程序的可读性相同”?或者说我们是否可以以0.05 的显著性水平(单侧pr=0.028444)拒绝“原假说H0: Stata学习者认为voodoo程序的可读性比sungmoo的要好”?如此这般的答案是否够“客观”呢? :-)
二维码

扫码加我 拉你入群

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

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

2009-7-5 17:54:10
voodoo 发表于 2009-7-5 13:46 至于“客观标准”,我想假如我们能从Stata学习者中抽取一个100人的随机样本,然后让它们对两段程序的可读性进行评价,假如60个人认为sungmoo程序的可读性比voodoo的强,那么我们是否可以以0.10 的显著性水平(双侧pr=0.056888)拒绝“原假说H0: Stata学习者认为两段程序的可读性相同”?或者说我们是否可以以0.05 的显著性水平(单侧pr=0.028444)拒绝“原假说H0: Stata学习者认为voodoo程序的可读性比sungmoo的要好”?如此这般的答案是否够“客观”呢? :-)
个人以为,如果以此种方式说明“客观”,其实不必披上统计学的外衣。

直接说成:“客观”以投票决定,就可以了。

再简单说,即以“民主”定义“客观”。这是否会导致“多数人暴力”?(当然这又是另一个问题了:以投票来决定或定义“客观标准”,会带来哪些问题)
二维码

扫码加我 拉你入群

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

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

2009-7-5 18:07:22
即使披上了统计学的外衣,我们为何选择0.1的显著性水平(或者其他某个水平)来设计拒绝域?

这个显著性水平的选择,是否还要通过投票来决定?
二维码

扫码加我 拉你入群

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

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

2009-7-5 18:56:27
谢谢两位,sungmoo和voodoo
我用两位的方法对样本都进行了分组,结果是对于一个接近60k观测值的样本来说,出现不一样的分组情况只有168例,应该在接受范围之内吧
二维码

扫码加我 拉你入群

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

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

2009-7-6 18:31:41
vincent829 发表于 2009-7-5 18:56
谢谢两位,sungmoo和voodoo
我用两位的方法对样本都进行了分组,结果是对于一个接近60k观测值的样本来说,出现不一样的分组情况只有168例,应该在接受范围之内吧
先验相同的方法却带来不同的结果,这事实上也是问题,而且是大问题。我个人能想到的原因有两个:
1. voodoo的方法并未忽略missing values,而sungmoo的cumul命令则忽略;
2. 更可能的原因是由于sort命令对相同mv公司排序的随机性导致(见如下程序示例,也可参见help sort),进而在不同情况下将相同mv的公司分入不同但相邻的group。sort命令有个stabe选项可以避免这一问题,但由于sungmoo的cumul命令中也暗含一个sort `by' `varlists'语句(viewsource cumul.ado),就不知该如何解决了。

clear
set obs 10
gen id = _n
gen mv = 1 in 1/5
replace mv = _n in 6/10
gen rnd = uniform()
sort rnd
list id mv  // 1st before sorting
preserve
sort mv
list id mv  // 1st after sorting
restore
list id mv  // 2nd before sorting
sort mv
list id mv  // 2nd after sorting
二维码

扫码加我 拉你入群

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

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

2009-7-7 11:39:47
voodoo 发表于 2009-7-6 18:31
2. 更可能的原因是由于sort命令对相同mv公司排序的随机性导致(见如下程序示例,也可参见help sort),进而在不同情况下将相同mv的公司分入不同但相邻的group。sort命令有个stabe选项可以避免这一问题,但由于sungmoo的cumul命令中也暗含一个sort `by' `varlists'语句(viewsource cumul.ado),就不知该如何解决了。
在Stata FAQs上看到一个关于sort随机性的提醒:http://www.stata.com/support/faqs/lang/sort.html
二维码

扫码加我 拉你入群

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

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

2018-4-9 21:51:35
sungmoo 发表于 2009-7-2 21:10
*不知以下可否实现目标?(酌情可去掉eq选项)
gsort year -mv
by year: cumul mv, g(group) eq
请问一下这个命令为什么总是第一等级的少一个,然后多出一个等级,比如说一共有30个值需要按照顺序大小五等分,应该每个等级都是六个值,但是group值是0 1 2 3 4 5 ,0有5个,多出一个5,这是什么原因啊
二维码

扫码加我 拉你入群

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

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

2018-4-10 20:16:34
sungmoo 发表于 2009-7-2 23:33
*如果公司的次序不重要,可以去掉eq项。试一下下面:

gsort year mv
为什么会多出一组,然后第一组少一个值
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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