楼主: 小鳄鱼a
2549 12

请教个分组程序 [推广有奖]

11
木子星 发表于 2016-11-6 22:46:02
尝试用data步写了一下,有空可以用宏写一下,思路就是利用merge来实现观测来源标识,最后通过标识按照楼主要求组合完成。
  1. /*录入数据a*/
  2. data a;
  3. input ida $ idb $;
  4. cards;
  5. a        b
  6. a        c
  7. a        d
  8. b        c
  9. d        f
  10. j        f
  11. g        h
  12. ;
  13. run;
  14. /*录入数据b*/
  15. data b;
  16. input idm $;
  17. cards;
  18. a
  19. b
  20. c
  21. d
  22. e
  23. f
  24. ;
  25. run;
  26. /*思路用merge分别将a和b合并,利用by变量和first.ida及first.idb来判别来自数据a或b*/
  27. proc sort data=a out=aa;
  28.         by ida;
  29. run;
  30. proc sort data=b out=bb;
  31.         by idm;
  32. run;
  33. /*先合并aa和bb表,先通过by iba变量来对来源打标签,即aa表中ida的值存在于bb表,则group_a=1,否则为零*/
  34. data both1;
  35.         merge aa (in=ina) bb(rename=(idm=ida) in=inb);
  36.         by ida;
  37.         if ina=0 & inb=1 then delete;
  38.         if ina & inb then group_a=1;
  39.         else group_a=0;
  40. run;
  41. proc print;
  42. run;
  43. /*对新组合表排序idb*/
  44. proc sort data=both1;
  45. by idb;
  46. run;
  47. /*在合并新组合表both1和bb表,通过by idm完成,则idb存在于idm中则group_b=1,否则为零*/
  48. data both;
  49.         merge both1(in=ina) bb(rename=(idm=idb) in=inb);
  50.         by idb;
  51.         if ina=0 & inb=1 then delete;
  52.         if ina & inb then group_b=1;
  53.         else group_b=0;
  54. run;
  55. proc print;
  56. run;
  57. /*对最后的结果排序,按照楼主的规则根据新添加的标签来加groupa和groupb的标签*/
  58. proc sort data=both;
  59.         by ida idb;
  60. run;
  61. data result;
  62.         set both;
  63.         by ida idb;
  64.         if group_a+group_b=2 then groupa=1;
  65.         else groupa=0;
  66.         if group_a+group_b ge 1 then groupb=1;
  67.         else groupb=0;
  68.         keep ida idb groupa groupb;
  69. run;

  70. proc print data=result;
  71. run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
小鳄鱼a + 5 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 5  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

12
baiyaoqian 发表于 2016-11-7 13:13:35
黃河泉 发表于 2016-11-5 07:37
请试试
这是什么语言?
stata?

13
黃河泉 在职认证  发表于 2016-11-7 17:54:02
baiyaoqian 发表于 2016-11-7 13:13
这是什么语言?
stata?
是(Stata)的!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 15:00