楼主: michasha
3225 10

[数据管理求助] 如何删除一些特定的行 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

本科生

17%

还不是VIP/贵宾

-

威望
0
论坛币
423 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
179 点
帖子
14
精华
0
在线时间
148 小时
注册时间
2017-1-22
最后登录
2023-8-10

楼主
michasha 发表于 2020-3-9 20:28:46 |AI写论文
200论坛币
模拟数据中id是分组变量,n是每个id内的顺序变量(不改动的),event只有0和1,我想做两件事:1.在某个ID,比如20003,event在按n排序的情况下是以0开始的,我需要删除20003组内从n=1开始所有的0,但是当event变为1,也就是第三行(n=3),就不再删除其余数据,包括不再删除20003组内剩余的0(比如n=5或6),这个模拟数据只有2行,实际数据中行数不定,总样本量比较大,不可能手动删除。但是对于id20007,是以1开始的就不需要删除。
第二个问题是我想挑出id组内的特定event序列,比如在某个id内,我想明确event在按n排序的前提下是否存在以下序列(11000..(中间可有若干个0)..0011),比如在id=20003内,存在的event序列是110011(n=3到n=8),我还想知道后面出现的第一个1(id 20003,n=7),这个对应的n是几(这里是7),烦请大神们赐教,谢谢


ideventn

200003

0

1

200003

0

2

200003

1

3

200003

1

4

200003

0

5

200003

0

6

200003

1

7

200003

1

8

200007

1

1

200007

1

2

200007

0

3

200007

0

4

200007

1

5

200007

1

6

200007

1

7


最佳答案

黃河泉 查看完整内容

第一个问题试试第二个我目前不会,但我已经到美国 Stata 论坛去问了,看看明天有无结果!
关键词:Event vent Even 模拟数据 实际数据

回帖推荐

黃河泉 发表于9楼  查看完整内容

针对第二个问题,试试

沙发
黃河泉 在职认证  发表于 2020-3-9 20:28:47
michasha 发表于 2020-3-10 17:52
----------------------- copy starting from the next line ----------------------------------------- ...
第一个问题试试
  1. // Q1
  2. bys id (n): gen temp = sum(event*n)
  3. drop if temp == 0
复制代码
第二个我目前不会,但我已经到美国 Stata 论坛去问了,看看明天有无结果!

藤椅
michasha 发表于 2020-3-10 15:15:47
顶个贴,各位高手帮忙看下呀,谢谢谢谢

板凳
黃河泉 在职认证  发表于 2020-3-10 16:02:27
michasha 发表于 2020-3-10 15:15
顶个贴,各位高手帮忙看下呀,谢谢谢谢
你若要问程序,永远附上相关资料 (请不要用截图);若附上资料,永远用 dataex 印出资料。
•        先 ssc install dataex (并见说明),将原始 Stata 资料中具有”代表性”的一部分资料列出,以供有意回答者实验之用,并能提供具体操作指令。
•        请参考说明 https://bbs.pinggu.org/thread-5048204-1-1.html

报纸
黃河泉 在职认证  发表于 2020-3-10 16:05:14
michasha 发表于 2020-3-10 15:15
顶个贴,各位高手帮忙看下呀,谢谢谢谢
此外,特定序列一定是前后两个 1,中间是 0 (可能有不同数目的 0) 吗?

地板
michasha 发表于 2020-3-10 17:52:36
黃河泉 发表于 2020-3-10 16:05
此外,特定序列一定是前后两个 1,中间是 0 (可能有不同数目的 0) 吗?
----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long id byte(event n)
  4. 200003 0 1
  5. 200003 0 2
  6. 200003 1 3
  7. 200003 1 4
  8. 200003 0 5
  9. 200003 0 6
  10. 200003 1 7
  11. 200003 1 8
  12. 200007 1 1
  13. 200007 1 2
  14. 200007 0 3
  15. 200007 0 4
  16. 200007 1 5
  17. 200007 1 6
  18. 200007 1 7
  19. 200008 0 1
  20. 200008 1 2
  21. 200008 1 3
  22. 200008 0 4
  23. 200008 0 5
  24. 200008 0 6
  25. 200008 0 7
  26. 200008 0 8
  27. 200008 1 9
  28. end
复制代码
------------------ copy up to and including the previous line ------------------
谢谢黄河泉老师提醒,这个是部分资料,烦请帮我看下,另外特定序列前后两个1,但中间的0数量是不确定的,十分感谢!

7
michasha 发表于 2020-3-10 18:40:40
黃河泉 发表于 2020-3-10 18:01
第一个问题试试第二个我目前不会,但我已经到美国 Stata 论坛去问了,看看明天有无结果!
厉害!十分感谢黄河泉老师!谢谢

8
黃河泉 在职认证  发表于 2020-3-11 06:35:58
michasha 发表于 2020-3-10 17:52
----------------------- copy starting from the next line ----------------------------------------- ...
有人针对你的第二个回答,我不太确定是否完全正确?主要在于  id=200007 的第 1-6 个观察值应该符合你要的,但第 7 个观察值又是 1,所以请确认这个 id 之正确答案是什么 (是 n=5, 还是没有),我可以再问问!

9
黃河泉 在职认证  发表于 2020-3-11 07:50:45
针对第二个问题,试试
  1. // Wouter Wakker
  2. sum n
  3. gen seq = ""
  4. forval i = 1/`r(max)' {
  5.     bysort id (n): replace seq = seq + string(event[`i'])
  6. }

  7. gen sub_seq  = regexs(0) if regexm(seq, "110+11")
  8. gen wanted1 = strpos(seq, sub_seq) + strlen(sub_seq) - 2 if regexm(seq, "110+11")

  9. // Bjarte Aagnes
  10. bys id (n) : gen byte wanted2 = sum(event)> 2 & event & event[_n+1] == 1 & ( event[_n-1] == 0 /* & event[_n+2] != 1 */ )
复制代码

10
震震果实 发表于 2020-3-11 14:09:52
  1. //FAN 3/11
  2. reshape wide event,i(id) j(n)

  3. forvalues i=1/9{                  //最长期为9期
  4. tostring event`i',replace
  5. }

  6. gen N=""
  7. forvalues i=1/9{                 //最长期为9期
  8. replace N=N+event`i'
  9. }

  10. gen s=index(N,"110011")           //11与11间存在"2"个0
  11. gen wanted=s+4 if s>0                //  4=2+"2"
  12. replace wanted=0 if wanted==.        //根据中间0的个数可替换""中数字

  13. reshape long event,i(id) j(n)

  14. drop N s
  15. destring event,replace
  16. drop if event==.

  17. bys id:gen t=sum(event)
  18. drop if t==0
  19. drop t
复制代码

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-4 01:31