楼主: calsunny
1637 4

请教如何寻找变量的相同值! [推广有奖]

  • 2关注
  • 5粉丝

讲师

84%

还不是VIP/贵宾

-

威望
0
论坛币
3460 个
通用积分
7.0000
学术水平
2 点
热心指数
5 点
信用等级
1 点
经验
1656 点
帖子
469
精华
0
在线时间
732 小时
注册时间
2007-4-3
最后登录
2019-12-3

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有个问题想了好久,一直没有做出来.来 请大家帮忙, 假设我有个数据是这样的:
  1. data test;
  2. input Sub$  Test$ R$;
  3. cards;
  4. 1  1   A
  5. 1  2   A
  6. 1  3   A
  7. 1  4   A
  8. 1  5   B
  9. 2  1   C
  10. 2  2   B
  11. 2  3   B
  12. 2  4   B
  13. 2  5   A
  14. 3  1   A
  15. 3  2   C
  16. 3  3   C
  17. 3  4   C
  18. 3  5   D
  19. 4  1   A
  20. 4  2   B
  21. 4  3   C
  22. 4  4   D
  23. 5  1   A
  24. 5  2   C
  25. 5  3   B
  26. 5  4   C
  27. 5  5   A
  28. ;
  29. run;
复制代码
就是我有5 个test,我如何才能找出结果(result)连续三个或者三个以上是A,B,或者C 的那些人(sub)呢?
二维码

扫码加我 拉你入群

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

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

关键词:Result cards RESUL Input test result 如何

回帖推荐

yongyitian 发表于3楼  查看完整内容

  1. data test;
  2. input Sub$  Test$  R$;
  3. cards;
  4. 1  1   A
  5. 1  2   A
  6. 1  3   A
  7. 1  4   A
  8. 1  5   B
  9. 1  6   C
  10. 1  7   C
  11. 1  8   C
  12. 2  1   C
  13. 2  2   B
  14. 2  3   B
  15. 2  4   B
  16. 2  5   A
  17. 3  1   A
  18. 3  2   C
  19. 3  3   C
  20. 3  4   C
  21. 3  5   D
  22. 4  1   A
  23. 4  2   B
  24. 4  3   C
  25. 4  4   D
  26. 5  1   A
  27. 5  2   C
  28. 5  3   C
  29. 5  4   C
  30. 5  5   A
  31. 5  6   A
  32. 5  7   A
  33. 5  8   A
  34. 5  9   F
  35. ;
  36. run;

  37. proc sort data=test;
  38. by sub test;
  39. run;

  40. data testfind;
  41. set test end=last;
  42. retain findc rlast " ";
  43. by sub ;

  44. if first.sub then do;
  45. count=0;
  46. rlast=r;
  47. findc=rlast;
  48. end;



  49. if rlast=r then do;
  50. count+1;
  51. end;



  52. else if rlast ne r then do;

  53. if count>=3 then do;
  54. output;
  55. count=1;
  56. rlast=r;
  57. findc=rlast;
  58. end;
  59. if count<3 then do;
  60. count=1;
  61. rlast=r;
  62. findc=rlast;
  63. end;

  64. end;

  65. if last.sub and count>=3 then output;
  66. keep sub findc count;

  67. run;
复制代码

使用道具

藤椅
yongyitian 发表于 2015-10-7 04:50:32 |只看作者 |坛友微信交流群
  1. data have;
  2. input Sub$  Test$ R$;
  3. cards;
  4. 1  1   A
  5. 1  2   A
  6. 1  3   A
  7. 1  4   A
  8. 1  5   B
  9. 2  1   C
  10. 2  2   B
  11. 2  3   B
  12. 2  4   B
  13. 2  5   A
  14. 3  1   A
  15. 3  2   C
  16. 3  3   C
  17. 3  4   C
  18. 3  5   D
  19. 4  1   A
  20. 4  2   B
  21. 4  3   C
  22. 4  4   D
  23. 5  1   A
  24. 5  2   C
  25. 5  3   B
  26. 5  4   C
  27. 5  5   A
  28. ;
  29. run;
  30. proc sort data = have;
  31.    by sub test;
  32. run;

  33. data TopScore;
  34.   s = 'A'; output;
  35.   s = 'B'; output;
  36.   s = 'C'; output;
  37. run;
  38. proc sql noprint;
  39.     select "'"||cat(a.s,b.s, c.s)||"'" into : topABC separated by ","
  40.     from TopScore as a, TopScore as b, TopScore as c;
  41. quit;

  42. %put '&topABC= ' &topABC;

  43. data want;
  44.     set have;
  45.     r1=lag(r);
  46.     r2 = lag2(r);       
  47.     if test>=3 then r3=cat(compress(r2),compress(r1),compress(r));
  48.     if r3 in (&topABC);
  49.     drop r1 r2;
  50. run;
复制代码

使用道具

板凳
calsunny 发表于 2015-10-7 08:18:40 |只看作者 |坛友微信交流群
非常感谢楼上两位大牛的热心帮忙,请问yongyitian,在你的output data有可能像二楼那样吗? 就是只output 那些AAA,BBB或者ABC等?  再次感谢两位.




使用道具

报纸
yongyitian 发表于 2015-10-8 08:50:05 |只看作者 |坛友微信交流群
5个tests的结果中,只有AAA,BBB,CCC 可能出现一次以上.
即有连续的 4 到 5个 A, 如 AAAA, AAAAA,或 B(BBBB,BBBBB) 或 C (CCCC,CCCCC).

其他的每种 A, B, C 组合, 如 ABC, AAB, CCA 等只能出现一次.

  1. data have;
  2. input Sub $  Test $ R $;
  3. cards;
  4. 1  1   A
  5. 1  2   A
  6. 1  3   A
  7. 1  4   A
  8. 1  5   B
  9. 2  1   C
  10. 2  2   B
  11. 2  3   B
  12. 2  4   B
  13. 2  5   A
  14. 3  1   A
  15. 3  2   C
  16. 3  3   C
  17. 3  4   C
  18. 3  5   D
  19. 4  1   A
  20. 4  2   B
  21. 4  3   C
  22. 4  4   D
  23. 5  1   A
  24. 5  2   C
  25. 5  3   B
  26. 5  4   C
  27. 5  5   A
  28. 6  1   B
  29. 6  2   B
  30. 6  3   B
  31. 6  4   B
  32. 6  5   B
  33. ;
  34. run;
  35. proc sort data = have;
  36.    by sub test;
  37. run;

  38. data TopScore;
  39.   s = 'A'; output;
  40.   s = 'B'; output;
  41.   s = 'C'; output;
  42. run;
  43. proc sql noprint;
  44.      select "'"||cat(a.s,b.s, c.s)||"'" into : topABC separated by ","
  45.          from TopScore as a, TopScore as b, TopScore as c;
  46. quit;
  47. %put '&topABC= ' &topABC;

  48. data want;
  49.     set have;
  50.     r1=lag(r);
  51.     r2 = lag2(r);       
  52.     if test>= 3 then r3 = cat(compress(r2), compress(r1), compress(r));
  53.     if r3 in (&topABC);
  54.     drop r1 r2;
  55. run;

  56. proc sql;
  57.    create table wanted as
  58.    select distinct sub, r3, count(r3) as N
  59.    from want
  60.    group by sub, r3
  61.    order by sub, r3;
  62. quit;
复制代码

MP752.GIF

第一条记录 sub=1, r3=AAA, N=2 说明 A 连续出现4次
最后一条记录 sub=6, r3=BBB, N=3 说明 B 连续出现5次



使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 19:02