楼主: winddr
1705 7

统计字符串出现与否 [推广有奖]

  • 0关注
  • 9粉丝

已卖:288份资源

博士生

91%

还不是VIP/贵宾

-

威望
0
论坛币
59 个
通用积分
111.2336
学术水平
5 点
热心指数
7 点
信用等级
3 点
经验
4300 点
帖子
165
精华
0
在线时间
523 小时
注册时间
2006-3-4
最后登录
2025-11-20

楼主
winddr 发表于 2015-3-9 17:15:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现有如下数据:
IDname

1

hirs1681

1

hirs1681

1

hirs1681

1

Purepixel

1

virtuosoonline

1

Purepixel

1

virtuosoonline

1

ndokceplok

2

hirs1681

2

pixelmotion

2

frontend

2

frontend

2

Purepixel

2

Purepixel

3

……

3

……

3

……

3

……
…………
现欲按照ID统计name字符变量出现与否,并累加(count1),以及出现的次数(count2),想要得到如下表格:
IDnamecount1count2

1

hirs1681

1

1

1

hirs1681

1

2

1

hirs1681

1

3

1

Purepixel

2

1

1

virtuosoonline

3

1

1

Purepixel

3

2

1

virtuosoonline

3

2

1

ndokceplok

4

1

2

hirs1681

1

1

2

pixelmotion

2

1

2

frontend

3

1

2

frontend

3

2

2

Purepixel

4

1

2

Purepixel

4

2

3

………………

3

………………

3

………………

3

………………
……………………
请教该如何实现?谢谢
二维码

扫码加我 拉你入群

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

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

关键词:字符串 ONLINE Motion nline front 字符串 统计

沙发
winddr 发表于 2015-3-9 17:38:39
呼唤大神

藤椅
sushe1527 发表于 2015-3-9 19:36:40
  1. data raw;
  2. input ID$        name$;
  3. p=_n_;
  4. cards;
  5. 1 hirs1681
  6. 1 hirs1681
  7. 1 hirs1681
  8. 1 Purepixel
  9. 1 virtuosoonline
  10. 1 Purepixel
  11. 1 virtuosoonline
  12. 1 ndokceplok
  13. 2 hirs1681
  14. 2 pixelmotion
  15. 2 frontend
  16. 2 frontend
  17. 2 Purepixel
  18. 2 Purepixel
  19. run;
  20. proc sort data=raw out=a;
  21. by id name;run;
  22. data c;
  23.     do _n_=1 by 1 until(last.name);
  24.         set a;
  25.                 retain count2 ;
  26.         by id name ;
  27.   if first.name then count2=0;
  28.   count2+1;
  29.         output;
  30.     end;
  31. run;
  32. proc sort data=c;by p ;run;
  33. proc sort data=raw out=b nodupkey;
  34. by id name ;
  35. run;
  36. proc sort data=b;by id p;run;
  37. data c1;set b;
  38. retain count ;
  39. by id p;
  40. if first.id then count=0;
  41. count+1;run;
  42. proc sort data=c;by id p;run;
  43. proc sort data=c1;by id p;run;
  44. data c2;
  45. merge c c1;
  46. by id p;
  47. run;
  48. data final(drop=p count);
  49. set c2;
  50. if count ne . then count1=count;
  51. retain count1;
  52. count=count1;
  53. run;
  54. data final;
  55. retain id name count1 count2;
  56. set final;
  57. run;
复制代码
已有 3 人评分经验 学术水平 热心指数 信用等级 收起 理由
winddr + 2 + 2 + 2 热心帮助其他会员
李会超 + 20 精彩帖子
天穹下 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 20  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

板凳
winddr 发表于 2015-3-9 20:53:28
sushe1527 发表于 2015-3-9 19:36
多谢多谢,程序完美运行!!!!!

报纸
mingfeng07 学生认证  发表于 2015-3-9 21:54:55
  1. data a;
  2. input ID name $20.;
  3. p=_n_;
  4. cards;
  5. 1 hirs1681
  6. 1 hirs1681
  7. 1 hirs1681
  8. 1 Purepixel
  9. 1 virtuosoonline
  10. 1 Purepixel
  11. 1 virtuosoonline
  12. 1 ndokceplok
  13. 2 hirs1681
  14. 2 pixelmotion
  15. 2 frontend
  16. 2 frontend
  17. 2 Purepixel
  18. 2 Purepixel
  19. run;
  20. proc sort data=a;by id p;run;
  21. data a;
  22. length name1 $1000;
  23. set a;
  24. by id p;
  25. retain name1 '0' count1;
  26. if first.id then do;name1=name;count1=1;end;
  27. else if find(name1,compress(name),'')=0 then do;
  28. count1+1;
  29. name1=catx('',name,name1);
  30. end;
  31. run;
  32. proc sort data=a out=b; by id name;run;
  33. data b(drop=name1);
  34. set b;
  35. by id name;
  36. if first.name then count2=1;
  37. else count2+1;
  38. run;
  39. proc sort data=b out=c(drop=p);by id p;run;
复制代码

地板
huangpengfei 发表于 2015-3-10 00:21:29
data raw;
        input ID name $20.;
        cards;
1 hirs1681
1 hirs1681
1 hirs1681
1 Purepixel
1 virtuosoonline
1 Purepixel
1 virtuosoonline
1 ndokceplok
2 hirs1681
2 pixelmotion
2 frontend
2 frontend
2 Purepixel
2 Purepixel
;
run;

proc sort data=raw;
        by id name;
run;

data a;
        set raw;
        by id name;
        new_name=lag(name);
        if first.id then
                do;
                        new_name=name;
                        count1=1;
                end;
                else if name=new_name  then count1=count1;
                        else count1+1;
        if first.name then count2=1;
                else count2+1;
        drop new_name p;
run;

7
farmman60 发表于 2015-3-10 01:57:17
  1. data raw;
  2.         input ID name $20.;
  3.         cards;
  4. 1 hirs1681
  5. 1 hirs1681
  6. 1 hirs1681
  7. 1 Purepixel
  8. 1 virtuosoonline
  9. 1 Purepixel
  10. 1 virtuosoonline
  11. 1 ndokceplok
  12. 2 hirs1681
  13. 2 pixelmotion
  14. 2 frontend
  15. 2 frontend
  16. 2 Purepixel
  17. 2 Purepixel
  18. ;
  19. run;

  20. proc sort data=raw;
  21.         by id name;
  22. run;

  23. data want;
  24.    set raw;
  25.    by id name;
  26.    if first.id then call missing(count1);
  27.    if first.name then call missing(count2);
  28.    if first.name then do;
  29.    count1+1;
  30.    count2+1;
  31.    end;
  32.    else count2+1;
  33.    run;
复制代码

8
huangpengfei 发表于 2015-3-10 22:27:59
farmman60 发表于 2015-3-10 01:57
能解释一下call missing 的用法吗?谢谢

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 01:15