3135 16

sas中的一个除重问题 [推广有奖]

  • 3关注
  • 0粉丝

大专生

55%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
703 点
帖子
49
精华
0
在线时间
45 小时
注册时间
2011-9-1
最后登录
2016-1-9

楼主
Qiao克力舞后 发表于 2013-7-8 23:33:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
[img]file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\851986797\QQ\WinTemp\RichOle\W3)5WG%]61%P{ZJB58LQ[E3.jpg[/img] QQ图片20130708232322.jpg
想把var3中每行的重复变量去掉
请问有什么办法


二维码

扫码加我 拉你入群

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

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

关键词:Application documents Document Settings setting

本帖被以下文库推荐

  • · sas|主题: 59, 订阅: 14

沙发
yongyitian 发表于 2013-7-9 07:03:45
  1. data test;
  2. length string $50.;
  3. input string $;
  4. datalines;
  5. 24357:625722:24357:7107:80499:7107
  6. 8013:552865:32626:562:8013:326:562
  7. 1703:228407:6213:1703:6213:509
  8. 636408:684730:560876:2896:8108
  9. ; run;

  10. data result;
  11. set test;
  12. array x{*} x1-x10;
  13. length new_string $50.;
  14. n = countw(string, ':');
  15. do i = 1 to n;
  16. x(i) = scan(string, i, ':');
  17. end;
  18. do i = 1 to n;
  19. do j = i+1 to n;
  20. if x(i) = x(j) then x(j) = . ;
  21. end;
  22. end;
  23. do i = 1 to n;
  24. if x(i) ^= . then
  25. new_string = catx(':', new_string, put(x(i), 9.));
  26. end;
  27. keep string new_string;
  28. run;
复制代码

Remove_dup.JPG
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
yzsxdlcc + 1 + 1 观点有启发
Actree + 1 + 1 + 1 不错
Qiao克力舞后 + 1 + 1 + 1 热心帮助其他会员

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

藤椅
Qiao克力舞后 发表于 2013-7-9 11:25:06
yongyitian 发表于 2013-7-9 07:03
还想请问,如果要是行列都除重的话,应该怎么改动?

板凳
yongyitian 发表于 2013-7-9 11:50:28
Qiao克力舞后 发表于 2013-7-9 11:25
还想请问,如果要是行列都除重的话,应该怎么改动?
如果不考虑每个数字在一行中出现的位置。只是去掉完全重复的行,
用proc sort with nodupkey option as follows.

proc sort data=result out=result_sort nodupkey;
    by string;
run;

如果考虑每个数字在一行中出现的位置 比如 1:2:3 和 3:2:1 也算重复的话.
那么要先对行排续, 然后再sort.

报纸
Qiao克力舞后 发表于 2013-7-9 12:30:44
yongyitian 发表于 2013-7-9 11:50
如果不考虑每个数字在一行中出现的位置。只是去掉完全重复的行,
用proc sort with nodupkey option as  ...
我的意思是,行列都除重,不是行完全相同或有位置变化 才除掉

地板
yongyitian 发表于 2013-7-9 21:50:21
Qiao克力舞后 发表于 2013-7-9 12:30
我的意思是,行列都除重,不是行完全相同或有位置变化 才除掉
这个还没想明白。有没有数据可以说明一下。

事实上,一楼的问题是去掉一个string中的重复的字符串, 并不是去掉每一行的重复值。 每一行一般会有多个变量。

7
Qiao克力舞后 发表于 2013-7-9 23:17:22
yongyitian 发表于 2013-7-9 21:50
这个还没想明白。有没有数据可以说明一下。

事实上,一楼的问题是去掉一个string中的重复的字符串, ...
还是上面的数据啊,我最终的目的是想找出var3中一共有多少个不同的字符串(行列所有分号分隔的字符串都算在范围内)

8
Qiao克力舞后 发表于 2013-7-9 23:17:25
yongyitian 发表于 2013-7-9 21:50
这个还没想明白。有没有数据可以说明一下。

事实上,一楼的问题是去掉一个string中的重复的字符串, ...
还是上面的数据啊,我最终的目的是想找出var3中一共有多少个不同的字符串(行列所有分号分隔的字符串都算在范围内)

9
yongyitian 发表于 2013-7-9 23:50:39
Qiao克力舞后 发表于 2013-7-9 23:17
还是上面的数据啊,我最终的目的是想找出var3中一共有多少个不同的字符串(行列所有分号分隔的字符串都算 ...
这个比前面的要简单
  1. data test;
  2.    length string $50.;
  3.    input string $;
  4. datalines;
  5. 24357:625722:24357:7107:80499:7107
  6. 8013:552865:32626:562:8013:326:562
  7. 1703:228407:6213:1703:6213:509
  8. 636408:684730:560876:2896:8108
  9. 24357:625722:24357:7107:80499:7107
  10. ; run;


  11. data test1;
  12.     set test;
  13.     obs=_n_;
  14.     n = countw(string, ':');
  15.     do i = 1 to n;
  16.     x = input(scan(string, i, ':'), 9.);
  17.     output;
  18.     end;
  19.     drop i n;   
  20.   *  keep x;
  21. run;

  22. proc sort data=test1 out = want nodupkey;
  23.    by x;
  24. run;

  25. proc print data=want; title 'want'; run;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Qiao克力舞后 + 1 + 1 + 1 热心帮助其他会员

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

10
qiangyoung 发表于 2013-7-10 08:36:48
学习下。

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

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