楼主: yumenderen
2449 8

[原创博文] 如何提取相应条件的重复值 [推广有奖]

  • 1关注
  • 2粉丝

讲师

7%

还不是VIP/贵宾

-

威望
0
论坛币
150 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
6843 点
帖子
291
精华
0
在线时间
475 小时
注册时间
2007-12-28
最后登录
2021-5-23

楼主
yumenderen 发表于 2011-8-18 16:46:42 |AI写论文
10论坛币
请教论坛里的高人,帮个忙吧
name type num date
X aaaa 1 200909
X aaab 2 200910
X aaab 3 200910
X aaab 13 201005
X aabb 4  201103
X abbb 10 201010
X aabb 12 201103
X bbbb 11 201002
Y aaaa 5 200808
Y aaab 6 200909
Z abab 7 201101
Z aabb 8 201102
Z abab 9 201103
;
我想提取name和type中组合相同的清单,然后再在此清单中可以按照要求来提取date中差异在1个月以上(或者1年)的所有清单,这样结果就该是
X aaab 2 200910
X aaab 3 200910
X aaab 13 201005
Z abab 7 201101
Z abab 9 201103
达人们来吧!

感谢cathy,解决的很完美,佩服高手

最佳答案

cathy3212 查看完整内容

不知道是不是你想要的,呵呵
关键词:如何提取 重复值 Cathy type date 如何

沙发
cathy3212 发表于 2011-8-18 16:46:43
  1. data aa;
  2. input name $ type $ num date $;
  3. cards;
  4. X aaaa 1 200909
  5. X aaab 2 200910
  6. X aaab 3 200910
  7. X aaab 13 201005
  8. X aabb 4  201103
  9. X abbb 10 201010
  10. X aabb 12 201103
  11. X bbbb 11 201002
  12. Y aaaa 5 200808
  13. Y aaab 6 200909
  14. Z abab 7 201101
  15. Z aabb 8 201102
  16. Z abab 9 201103
  17. ;
  18. run;

  19. proc sql;
  20.         create table aa1 as select
  21.         name
  22.         ,type
  23.         ,count(distinct date) as cnt
  24.         /*下面的sql过程中将cnt>1作为条件,所以,需要保证的是date变量是数值的或者字符的精确到月,
  25.         要是想到大于1年的话,得进行预先处理,把date取前4位数比如int(date/100)之类的*/
  26.         from aa
  27.         group by name,type;
  28.         create table aa2 as select
  29.         aa.*
  30.         from aa inner join aa1
  31.         on aa.name=aa1.name
  32.         and aa.type=aa1.type
  33.         and cnt>1;
  34. quit;
复制代码
不知道是不是你想要的,呵呵

藤椅
yumenderen 发表于 2011-8-18 17:18:35
居然整出来了,但是要处理5步,感觉过程冗余,看看高手们有没有好的解答。

板凳
yumenderen 发表于 2011-8-18 20:59:14
达人们快来看看呀

报纸
jasonscut 在职认证  发表于 2011-8-18 23:30:36
我之前发的贴好像可以用上:

1)  proc sort data=data1 out=data2;
     by name type;     run;
2) proc transpose data=data2 out=data3 prefix=date_;
    by name type;
    var date;
   run;
3) data data4; set data3;
   array date(13) date_1_date_13;  
   do i=1 to 13;
   if ....

if condition  需要你自己去琢磨了.

我只是个高中生.
北美统计金融博士

地板
leedx 发表于 2011-8-19 09:31:17
学习了~~~thanks~

7
yumenderen 发表于 2011-8-19 11:27:42
牛人啊~~顶

8
jasonscut 在职认证  发表于 2011-8-19 13:51:59
认可的话应该给点赏钱。

哈哈。。
北美统计金融博士

9
cathy3212 发表于 2011-8-19 14:02:05
不客气不客气,其实我也学了没多久,大家一起加油啊!呵呵

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

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