全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1736 18
2021-08-13
悬赏 30 个论坛币 已解决
各位大侠,您好,我在stata应用过程中遇到了两个问题,现特向各位stata高手请教求助. dataex

----------------------- copy starting from the next line -----------------------
复制代码

------------------ copy up to and including the previous line ------------------



问题1: 提取变量keys中的某特定值的序号并存储于暂元中,如m,在以上数据的序号分别是8,17,27,37,当然实际他们的分布没有特定的规律,每组有一个,但位置不固定,想将序号提取出来,然后应用于循环中。
set obs _n
levelsof obs if keys == "m", gen(num)
ret list
这种方法我用过了,想看看还有没有别的好方法

问题2:变量keys中的某特定值如b在各组中连续出现(注:一定要连续出现,如不连续出现则不计)的次数最大值,如b在第1、2、3、4组中分别出现了2,3,3,5次,最大值为5,需要提取这个最大值和存储于暂元中。
我用tabstat能求出连续值的个数列表,没能继续求结果,请各位大侠出手 帮助

以上两问题的各种解答方法(第一问我已经使用并呈现的方法除外)按方法计都奖励30积分,不同方法累积积分,如果相同方法则第一个提供者得到奖励。(注:用不同的命令属于不同的方法,用矩阵或者mata也是不同的方法,用不同的程序思路解决问题也属于不同的方法……但是如第一问中自己提供的方法,如有另外提供如下程序:set a =_n,levelsof a if keys == "m", gen(b),则属于同一种方法。请各位大侠积极出手相助。
谢谢大家,再次感谢!!!


最佳答案

zdlspace 查看完整内容

第一个问题你已经解决了我就不回答了。回答第二个问题,为了满足你的要求,我在group=4时加了一个不连续的b,让你看得更清楚些。
二维码

扫码加我 拉你入群

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

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

全部回复
2021-8-13 11:59:28
第一个问题你已经解决了我就不回答了。回答第二个问题,为了满足你的要求,我在group=4时加了一个不连续的b,让你看得更清楚些。
复制代码
二维码

扫码加我 拉你入群

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

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

2021-8-13 16:25:31
第二个也可以
bys group:egen count=count(keys) if keys=="b"
egen max=max(count)
local max=max
二维码

扫码加我 拉你入群

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

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

2021-8-13 16:41:46
第二个只能针对你现有数据有效 还是楼上的正解
给个第一个的其他解法
gen id=_n
gen id2=id if keys=="m"
levelsof id2
dis r(levels)
二维码

扫码加我 拉你入群

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

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

2021-8-13 16:41:49
pengxhan 发表于 2021-8-13 16:25
第二个也可以
bys group:egen count=count(keys) if keys=="b"
egen max=max(count)
这个代码不行哦,他要的是连续的b的个数最大值,举个例子:
复制代码
按照我的代码得到的是3,按你的代码得到的是5.他要求b一定要连续出现哦,如不连续则不计。
二维码

扫码加我 拉你入群

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

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

2021-8-13 17:10:51
谢谢楼主的回复:很好的思路,您提供的两种方法,
第一种方法:我改进如下
spell keys,by(group)
gen d=_seq*_end if keys=="b"
sum d
local max `r(max) '

第二种方法:有些小瑕疵,因为它没有识别是否为连续出现的b,连续的最大计数为5,而不是6,该方法把所组内所有的结果都计篱



二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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