全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
4210 4
2014-10-14
按一个或多个变量进行分组,然后keep每组的前n行,输入项就是这些变量和这个数字n,,,那么输入项怎么写呢?就是syntax后面部分~~
二维码

扫码加我 拉你入群

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

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

全部回复
2014-10-15 10:34:54
sort group1 group2
bysort group1 group2: gen obs_n
keep if obs<=3
二维码

扫码加我 拉你入群

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

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

2014-10-16 15:10:26
ermutuxia 发表于 2014-10-15 10:34
sort group1 group2
bysort group1 group2: gen obs_n
keep if obs
bysort group1 group2: gen obs = _n (纠正下)

太感谢了,简单几条命令就能解决我想要做的事情,我还傻呼呼地自己编写程序,O(∩_∩)O哈哈~
二维码

扫码加我 拉你入群

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

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

2014-10-16 15:45:48
这是之前自己编的(太繁杂,仅供娱乐哈~~):


*=================== s l t o p ==================

*===========取出每组前n行观察值====keep========调试成功!!2014年10月12日16:00:03
*-假如保留每组前5行,现有一组只有3行,不足5行
        *那么这3行全部保留,其余>=5行的保留前5行
*        year        var2                                        year        var2
*        2000        *                                                2000
*        2000        *                                                2000
*        2000        *                                                2001                            //不足2个记录,将全部保留
*        2001        *    sltop 2 year                2002
*        2002        *    =============>                2002
*        2002        *                                                2003
*        2002        *                                                2003
*        2003        *
*        2003        *
*        2003        *  
       
       
       
       
       
       
       
*--------------------------------------------------


cap program drop sltop
program define sltop
version 13.0
syntax varname , Select(numlist min=1 max=1)  //exp: sltop year , select(10)
global n=`select'    //取出每组前n行
*------------------------------------------------------
tempvar id
tempvar select
egen `id'=group(`varlist') //标识组的变量
gsort `id'
gen byte `select'=0
loc j=1
loc i=0

while `j'<=_N  {
        if `id'[`j'] ~= `i' {
                loc k=1
                while (`k'<=$n) & (`j'<=_N ) & (`k'>0) {
                        qui replace `select'=1  in `j' //注意replace v=100 in 1和v[1],后者用于返回值
                        loc ++k
                        loc ++j
                        if (`id'[`j']-`id'[`j'-1]) ~= 0   {
                                        loc k=-1
                                        loc a=`1'[`=`j'-1']
                                        dis _n in g "原文件变量" in w "`1'" in g "第`j'个观察值" in w "`a'" _n in g ///
                                        "所在组别记录数<=设定的保留数,将全部保留!"
                        }

                }
                loc ++i
        }
       
        else  {
                loc ++j
               
        }
}


keep if `select' == 1

end




二维码

扫码加我 拉你入群

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

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

2014-10-16 15:53:42
这是在借鉴二楼的命令编的功能相同的程序,非常的简洁:

cap program drop sltop
program define sltop
version 13.0
syntax varlist , Select(numlist min=1 max=1)  //exp: sltop year , select(10)
tempvar id
bysort `varlist' : gen `id'=_n
keep if `id'<=`select'

end
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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