楼主: zhushji
3250 8

请教各位高手:数据集的记录筛选及转置问题 [推广有奖]

  • 0关注
  • 2粉丝

已卖:621份资源

博士生

80%

还不是VIP/贵宾

-

威望
0
论坛币
2824 个
通用积分
3.7251
学术水平
1 点
热心指数
4 点
信用等级
0 点
经验
4309 点
帖子
171
精华
0
在线时间
515 小时
注册时间
2008-10-30
最后登录
2025-12-23

楼主
zhushji 发表于 2009-9-9 18:01:10 |AI写论文
6论坛币
第一个问题:如何从一个已知的数据集中将具有相同ID的记录(>=2条以上)筛选出来建立一个新的数据集?
举例说明:
IDx
45000115
45000114
45000212
45000313
45001218
45001219
45010418
45010412
45010415

等等....数据集里记录达3万多条且ID编号没有多大规律可循!想要得到这样的结果:
IDx
45000115
45000114
45001218
45001219
45010418
45010412
45010415
......
......
......
......
......

即具有唯一ID的记录不进入新数据集,具有相同ID 的两条或两条以上的记录进入新数据集;


第二个问题:在建成上述新数据集的基础上可不可以将每个ID变成唯一的一条记录,变量x重新被命名,有几个相同的ID记录就有几个x变量。即想得到这样的形式:
ID          x1     x2     x3
450001                   1514 .
4500121819 .
4501041812 15
......... ...


谢谢大家!!!

最佳答案

关键词:数据集 筛选出 请教 高手 筛选 数据集 记录

回帖推荐

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

data a; input ID x @; z=_n_; cards; 450001 15 450001 14 450002 12 450003 13 450012 18 450012 19 450104 18 450104 12 450104 15 ;run; proc sql ; create table new1 as select * ,count(id) as count from a group by id having count>=2 order by z; alter table new1 drop z ,count;quit; proc transpose data=new1 out=new2(drop=_name_) prefix=x; by id;var x;run;

jingju11 发表于2楼  查看完整内容

1# zhushji

本帖被以下文库推荐

沙发
jingju11 发表于 2009-9-9 18:01:11
1# zhushji
  1. *use the above dataset a;
  2. proc sort data=a; by id; run;
  3. data new;
  4. set a;
  5. by id;
  6. if first.id then if first.id=last.id then delete;
  7. run;
  8. proc transpose data=new out=out(drop=_name_) prefix=x;
  9. by id;
  10. var x;
  11. run;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

藤椅
sushe1527 发表于 2009-9-9 18:34:48
data a;
input
ID x @;
z=_n_;
cards;
450001 15
450001 14
450002 12
450003 13
450012 18
450012 19
450104 18
450104 12
450104 15
;run;
proc sql ;
create table new1 as select * ,count(id) as count
from a group by id having count>=2 order by z;
alter table new1 drop z ,count;quit;
proc transpose data=new1 out=new2(drop=_name_) prefix=x;
by id;var x;run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
lion_li 发表于 2009-9-9 21:51:52
  1. data a;
  2. input
  3. ID x @;
  4. cards;
  5. 450001 15
  6. 450001 14
  7. 450002 12
  8. 450003 13
  9. 450012 18
  10. 450012 19
  11. 450104 18
  12. 450104 12
  13. 450104 15
  14. ;run;
  15. proc sort;by id;run;
  16. data b;
  17. set a;
  18. by id;
  19. if first.id=1 & last.id=1 & first.id=last.id then delete;
  20. run;
  21. proc transpose data=b out=c(drop=_NAME_);
  22. by id;var x;run;
复制代码

报纸
jingju11 发表于 2009-9-10 01:58:10
4# lion_li
if first.id=1 & last.id=1 & first.id=last.id then delete;
这应该是对我的程序的修改了。请问什么理由呢?只是请教,没有冒犯的意思。


  1. proc transpose data=b out=c(drop=_NAME_);
复制代码


没有了prefix 选项,如何得到x1 x2 x3...呢?

地板
yongyitian 发表于 2009-9-10 03:36:51
proc sql;
   create table b as
   select Id, x
        from  
      (select Id, x, count(id) as N_id
           from a
       group by id
       having N_id >=2);
quit;

7
tangb 发表于 2009-9-10 05:19:10
佩服!佩服!

8
sgx0213 发表于 2009-9-10 20:27:54
学习学习,了不起

9
haizai110 发表于 2009-9-10 22:06:35
学习学习,了不起
本文来自: 人大经济论坛 详细出处参考:http://www.pinggu.org/bbs/viewth ... &from^^uid=164598
[url=http://www.pinggu.org/bbs/X_AdvCom_Get.asp?UserID=164598][img]

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

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