楼主: 皖山一流
4167 4

[编程问题求助] stata编程中,要求输入一个数字和若干个变量,怎么写输入项? [推广有奖]

  • 4关注
  • 13粉丝

已卖:215份资源

讲师

25%

还不是VIP/贵宾

-

威望
0
论坛币
2352 个
通用积分
156.1810
学术水平
73 点
热心指数
80 点
信用等级
54 点
经验
16517 点
帖子
352
精华
0
在线时间
308 小时
注册时间
2013-12-9
最后登录
2021-1-21

楼主
皖山一流 学生认证  发表于 2014-10-14 10:42:52 来自手机 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
按一个或多个变量进行分组,然后keep每组的前n行,输入项就是这些变量和这个数字n,,,那么输入项怎么写呢?就是syntax后面部分~~
二维码

扫码加我 拉你入群

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

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

关键词:stata编程 Stata tata SYNTAX keep

沙发
ermutuxia 发表于 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

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

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