楼主: jmjun85
4079 15

[数据管理求助] 又要向大家求助了,一个统计个数的问题 [推广有奖]

11
jmjun85 发表于 2015-4-7 09:29:06
SpencerMeng 发表于 2015-4-6 22:22
哦哦 我明白了。

我不会写循环,您看如下代码吧,麻烦些,希望能给您启示:
谢谢你了。试了没问题。我再来想想怎么让他循环吧

12
SpencerMeng 在职认证  发表于 2015-4-7 09:31:41
jmjun85 发表于 2015-4-7 09:29
谢谢你了。试了没问题。我再来想想怎么让他循环吧
我突然会了~!!
  1. clear
  2. inp id str10 x
  3.   1 "a;b"
  4.   1 "c;d"
  5.   1 "f;b;c;d"
  6.   1 "w;d;c;d"
  7.   1 "d;b;c"
  8.   1 "s;d"
  9.   2 "a;b"
  10.   2 "c;d"
  11.   2 "f;b;c;d"
  12.   2 "w;d;c;d"
  13.   2 "d;b;c"
  14.   2 "s;d"
  15.   3 "a;b"
  16.   3 "c;d"
  17.   3 "f;b;c;d"
  18.   3 "w;d;c;d"
  19.   3 "d;b;c"
  20.   3 "s;d"

  21. end

  22. split x,parse(";")

  23. foreach x of numlist 1 2 3 {
  24. preserve
  25. keep if id==1
  26. stack x1 x2 x3 x4,into(v) clear //将拆开的变量堆积成一列
  27. duplicates drop v, force //删除重复的字母
  28. count if v !="" //数出非重复字母的个数
  29. restore
  30. }
复制代码

13
jmjun85 发表于 2015-4-7 09:33:20
SpencerMeng 发表于 2015-4-7 09:31
我突然会了~!!
那还要考虑一个问题,就是把最终计算的数字要存储到一个变量里呢,还要和前面的id对应上呢。
刚才想了半天还是没弄好

14
jmjun85 发表于 2015-4-7 09:33:55
还是版主厉害

15
SpencerMeng 在职认证  发表于 2015-4-7 10:06:19
jmjun85 发表于 2015-4-7 09:33
那还要考虑一个问题,就是把最终计算的数字要存储到一个变量里呢,还要和前面的id对应上呢。
刚才想了半 ...
如果要放到变量里面。。。我功力不足。。循环弄不出来,只能想出麻烦些的代码

我需要灵感。。。哈哈 我也是自学 有想法就调试下
  1. clear
  2. inp id str10 x
  3.   1 "a;b"
  4.   1 "c;d"
  5.   1 "f;b;c;d"
  6.   1 "w;d;c;d"
  7.   1 "d;b;c"
  8.   1 "s;d"
  9.   2 "a;b"
  10.   2 "c;d"
  11.   2 "f;b;c;d"
  12.   2 "w;d;c;d"
  13.   2 "d;b;c"
  14.   2 "s;d"
  15.   3 "a;b"
  16.   3 "c;d"
  17.   3 "f;b;c;d"
  18.   3 "w;d;c;d"
  19.   3 "d;b;c"
  20.   3 "s;d"

  21. end

  22. split x,parse(";")

  23. keep if id==1
  24. stack x1 x2 x3 x4,into(v) clear //将拆开的变量堆积成一列
  25. duplicates drop v, force //删除重复的字母
  26. egen id2=group(v)
  27. egen num=max(id2)
复制代码

16
SpencerMeng 在职认证  发表于 2015-4-7 10:11:19
关键是这个stack啊。。。一堆积之后就把原来的id覆盖了。。

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

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