楼主: danccyf
1771 2

[数据管理求助] 略微有点复杂的数据拆分处理问题,有例子 [推广有奖]

  • 1关注
  • 0粉丝

大专生

21%

还不是VIP/贵宾

-

威望
0
论坛币
111 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2461 点
帖子
23
精华
0
在线时间
57 小时
注册时间
2011-2-17
最后登录
2021-11-30

楼主
danccyf 发表于 2014-4-2 11:29:21 |AI写论文
50论坛币
先上栗子:
XYXZYZ

103

1

103

103

1

103

103

2

541

3

2

103

541

3

542

4

3

3

542

4

480

480

4

4

480

5

495

7

5

480

480

6

512

8

6

480

495

7

481

9

7

7

512

8

513

10

8

8

481

9

55

134

9

9

513

10

56

134

10

10

55

134

57

134

134

134

56

134

40

115

115

115

57

134

41

115

40

115

            41

           115





--------------------------------------------------------------------------------------------
以上是xy,xz,yz表格---------希望通过xy图表得到xz,yz图表。
z等于说是新建立的一个衡量标准,使得一个含有x的数据可以merge m:1 x using xz表格;另一个含有y的数据可以merge m:1 y using yz表格。
xz表格中x的数字都只出现一次,不重复
yz表格中y的数字都只出现一次,不重复

求stata做法,不行的话一些code意见或者想法作为参考也行!
关键词:Merge Using Stata tata code

沙发
jungsee 发表于 2014-4-2 11:29:22
  1. *********create   x_z database***************
  2. cd d:\
  3. use ddd,clear
  4. sort x y
  5. duplicates drop x,force
  6. gen id_x=_n
  7. save single.dta,replace

  8. use ddd,clear
  9. sort x y
  10. bysort x : gen repeat_num=_n
  11. bysort x : gen total_num=_N
  12. merge m:1 x using single
  13. drop _merge
  14. keep if total_num==1
  15. keep x y id_x
  16. save no_dup,replace


  17. use ddd,clear
  18. sort x y
  19. bysort x : gen repeat_num=_n
  20. bysort x : gen total_num=_N
  21. merge m:1 x using single
  22. drop _merge
  23. keep if total_num>1
  24. duplicates drop x,force
  25. drop y
  26. gen y=x
  27. keep x y id_x
  28. save dup,replace

  29. appen using no_dup,generate(dup_database)
  30. order x y id_x
  31. sort x y
  32. rename y z
  33. save final_xz.dta,replace



  34. *********create   y_z database***************
  35. cd d:\
  36. use ddd,clear
  37. rename x s1
  38. rename y s2
  39. rename s1 y
  40. rename s2 x
  41. save ddd1,replace


  42. use ddd1,clear
  43. sort x y
  44. duplicates drop x,force
  45. gen id_x=_n
  46. save single1.dta,replace

  47. use ddd1,clear
  48. sort x y
  49. bysort x : gen repeat_num=_n
  50. bysort x : gen total_num=_N
  51. merge m:1 x using single1
  52. drop _merge
  53. keep if total_num==1
  54. keep x y id_x
  55. save no_dup1,replace


  56. use ddd1,clear
  57. sort x y
  58. bysort x : gen repeat_num=_n
  59. bysort x : gen total_num=_N
  60. merge m:1 x using single1
  61. drop _merge
  62. keep if total_num>1
  63. duplicates drop x,force
  64. drop y
  65. gen y=x
  66. keep x y id_x
  67. save dup1,replace

  68. appen using no_dup1,generate(dup_database)
  69. order x y id_x
  70. sort x y
  71. rename y z
  72. rename x y
  73. rename id_x id_y
  74. save final_yz.dta,replace
复制代码

ddd.txt
下载链接: https://bbs.pinggu.org/a-1520649.html

116 Bytes

数据文件

藤椅
jungsee 发表于 2014-4-2 15:58:34
jungsee 发表于 2014-4-2 11:29
在前面proc.基础上,补充这个code,从而使连续重复后面的数据行(不重复行),z value变成和y value, 但是在前一步处理过的 y 值出现过重复的数据行 保持不变。如果,你有其他要求,只要做相应调整即可。hope it helps!!!

use final_yz.dta,clear
sort y
gen lagz=z[ _n-1]
gen temp=-y
sort temp
gen leadz=z[ _n-1]
drop temp
sort y
gen if_1=0
gen if_2=0
gen if_total=0
replace if_1=1 if z==lagz
replace if_2=1 if z==leadz
replace if_total=1 if if_1==1  | if_2!=0

replace z=y if if_total==0 & dup_database==1
save final_yz02.dta,replace

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

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