楼主: liyx353
1417 6

[数据管理求助] stata如何删除重复测量资料第一次出现阳性结果之后的观测 [推广有奖]

  • 0关注
  • 0粉丝

高中生

97%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0.6000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
71 点
帖子
8
精华
0
在线时间
73 小时
注册时间
2015-6-3
最后登录
2023-6-11

楼主
liyx353 发表于 2018-3-12 22:00:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
NO        date                  outcome
1        2011/7/10                0
1        2011/10/17        0
1        2011/11/16        0
1        2012/4/5                1
1        2013/6/20                0
1        2013/11/20        0
2        2011/7/11                0
2        2012/2/8                0
2        2012/9/25                1
2        2012/9/25                0
2        2013/3/15          1
2        2013/12/11        0

例如上面的数据结构,NO代表个体,每个人随访时间、次数都不一样,按照时间排好序之后,outcome要保留第一次出现1及其之前的观测。如何写程序呢?

二维码

扫码加我 拉你入群

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

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

关键词:stata数据处理

示例.png (6.09 KB)

示例

示例

沙发
黃河泉 在职认证  发表于 2018-3-13 18:08:51
1.        你若要问程序 (code),请附上资料;你若要附资料,请用 dataex 印出资料。
2.        尔后建议请用 dataex (先 ssc install dataex 并见说明) 将原始 Stata 资料中具有”代表性”的一部分资料列出,以供有意回答者实验之用,并能提供具体操作指令。并请参考 http://www.jianshu.com/p/9870080fe769,  https://bbs.pinggu.org/thread-5048204-1-1.html, 与 https://bbs.pinggu.org/thread-5917273-1-1.html

藤椅
逍遥梦蝶 发表于 2018-3-13 18:53:32
  1. cls
  2. clear

  3. /* Input the example data*/
  4. input str5 no str15 date outcome
  5. 1 "2011/7/10"  0
  6. 1 "2011/10/17" 0
  7. 1 "2011/11/16" 0
  8. 1 "2012/4/5"   1
  9. 1 "2013/6/20"  0
  10. 1 "2013/11/20" 0
  11. 2 "2011/7/11"  0
  12. 2 "2012/2/8"   0
  13. 2 "2012/9/25"  1
  14. 2 "2012/9/25"  0
  15. 2 "2013/3/15"  1
  16. 2 "2013/12/11" 0
  17. end

  18. /* Create a date variable in Stata date format */
  19. split date, parse("/")
  20. drop date
  21. destring date*, replace
  22. gen date = mdy(date2, date3, date1)
  23. format date %td
  24. drop date?
  25. order no date outcome

  26. /* Find out the first appearance with outcome == 1 */
  27. gsort no -outcome date // An important step
  28. by no: gen temp = _n
  29. gen first = (temp == 1)
  30. drop temp
  31. sort no date

  32. /* Add the first appearance date to current data set */
  33. preserve
  34.    keep if first == 1
  35.    rename date firstdate
  36.    tempfile firstlist
  37.    save `firstlist'
  38. restore   

  39. merge m:1 (no) using `firstlist', keepusing(firstdate)
  40. drop _merge

  41. /* Drop unsatifying rows */
  42. drop if (date >= firstdate) & (first == 0)
复制代码

板凳
liyx353 发表于 2018-3-17 10:37:12
黃河泉 发表于 2018-3-13 18:08
1.        你若要问程序 (code),请附上资料;你若要附资料,请用 dataex 印出资料。
2.        尔后建议请用 dataex (先 ...
谢谢您的提醒,下一次提问一定按照您说的方法进行操作

报纸
liyx353 发表于 2018-3-17 11:12:39
逍遥梦蝶 发表于 2018-3-13 18:53
谢谢您的回答,只是我在运行 merge 这一句的时候,显示“invalid file specification”,不知道是哪里出了问题?
另外,我用了一个比较笨的方法:
  1. sort no date outcome
  2. bys NO:drop if date>=date[_n-1] & outcome[_n-1]==1
复制代码

后面那一句其实是要循环的,但因为每次只能删除一条符合要求的,我又不知道该如何循环,所以就只有手动跑了十几次。。。
如果您知道该如何操作,希望能一起回答这两个问题。非常感谢!还有上次上传的是截图,给您带来不便非常抱歉!

地板
黃河泉 在职认证  发表于 2018-3-17 15:56:44
试试
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str5 no str15 date float outcome
  4. "1" "2011/7/10"  0
  5. "1" "2011/10/17" 0
  6. "1" "2011/11/16" 0
  7. "1" "2012/4/5"   1
  8. "1" "2013/6/20"  0
  9. "1" "2013/11/20" 0
  10. "2" "2011/7/11"  0
  11. "2" "2012/2/8"   0
  12. "2" "2012/9/25"  1
  13. "2" "2012/9/25"  0
  14. "2" "2013/3/15"  1
  15. "2" "2013/12/11" 0
  16. end

  17. gen ymd = date(date,"YMD")
  18. format ymd %td

  19. bys no (ymd): gen csum1 = sum(outcome)
  20. bys no (ymd): gen csum2 = sum(csum1)
  21. drop if csum2 > 1
复制代码

7
liyx353 发表于 2018-3-19 22:58:07
黃河泉 发表于 2018-3-17 15:56
试试
这个太好了!原来bys 括号里面的内容是这个意思!非常感谢!

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

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