请选择 进入手机版 | 继续访问电脑版
楼主: shirleyctj
10006 8

求解!!关于如何把多行数据合并成一行by ID [推广有奖]

  • 0关注
  • 0粉丝

小学生

85%

还不是VIP/贵宾

-

威望
0
论坛币
14 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
557 点
帖子
10
精华
0
在线时间
9 小时
注册时间
2015-8-20
最后登录
2019-9-23

shirleyctj 学生认证  发表于 2016-10-31 12:18:43 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的数据是这样的:      ID           Term

1

2151

1

2155

2

2151

2

2155

3

2151

4

2151

5

2151

5

2155

6

2151

7

2151

7

2155

8

2155

9

2155

10

2151




我要如何根据ID,把多行observations合并成每个ID一行是数据??我用proc sql折腾了很久都没成功,要哭死了T T
求助求助!!!!感激不尽!
二维码

扫码加我 拉你入群

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

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

关键词:数据合并 observations observation proc sql observat 如何

shirleyctj 学生认证  发表于 2016-10-31 12:20:00 |显示全部楼层 |坛友微信交流群
我知道也可以用retain,但是每个ID的数量不一样,我就蒙住了,求教各位大神T T

使用道具

同求,一样不懂

使用道具

baiyaoqian 发表于 2016-10-31 13:33:48 |显示全部楼层 |坛友微信交流群
如下可以吗?
方法1:
data tmp;
input ID Term;
datalines;
1        2151
1        2155
2        2151
2        2155
3        2151
4        2151
5        2151
5        2155
6        2151
7        2151
7        2155
8        2155
9        2155
10        2151
;
run;

proc sql;
        create table tmp_transpose as
        select id,
                        max(case when term=2151 then term else . end) as v2151,                       
                        max(case when term=2155 then term else . end) as v2155
        from tmp
        group by 1
        ;
quit;

proc print noobs;
run;

方法2
proc transpose data=tmp out=tmp_new;
        by id;
        id term;
        var term;
run;

proc print ;
run;

使用道具

baiyaoqian 发表于 2016-10-31 13:33
如下可以吗?
方法1:
data tmp;

使用道具

木子星 发表于 2016-10-31 19:29:05 |显示全部楼层 |坛友微信交流群
楼主没有提到,单观测的是否要按照大小排,提供一段不按大小排的代码,见笑。
  1. data tmp;
  2. input ID Term;
  3. datalines;
  4. 1        2151
  5. 1        2155
  6. 2        2151
  7. 2        2155
  8. 3        2151
  9. 4        2151
  10. 5        2151
  11. 5        2155
  12. 6        2151
  13. 7        2151
  14. 7        2155
  15. 8        2155
  16. 9        2155
  17. 10        2151
  18. ;
  19. run;

  20. proc sort data=tmp;
  21.         by id;
  22. run;
  23. data result;
  24.         set tmp;
  25.         by id;
  26.         retain one_term two_term count;
  27.         if first.id then do;
  28.                 count=1;
  29.                 one_term=term;
  30.                 if last.id then do;
  31.                 two_term=.;
  32.                 output;
  33.                 end;
  34.         end;
  35.     if last.id & first.id=0 then do;
  36.                 two_term=term;
  37.                 count=count+1;
  38.                 output;
  39.         end;
  40.         keep id one_term two_term count;
  41. run;
  42. proc print data=result;
  43. run;
复制代码

使用道具

shirleyctj 学生认证  发表于 2016-10-31 22:15:20 |显示全部楼层 |坛友微信交流群
baiyaoqian 发表于 2016-10-31 13:33
如下可以吗?
方法1:
data tmp;
太赞了~!我之前就是用的类似方法max那个,但是怎么都出不来T T 谢谢大神啊~!!

使用道具

shirleyctj 学生认证  发表于 2016-10-31 22:20:05 |显示全部楼层 |坛友微信交流群
木子星 发表于 2016-10-31 19:29
楼主没有提到,单观测的是否要按照大小排,提供一段不按大小排的代码,见笑。
不需要排列的~我运行了,非常完美感谢感谢!!我之前一直纠结每个id的数量是不相同的,然后就蒙掉了,你们够太给力!学习了~

使用道具

立妍Z 发表于 2022-4-6 14:40:54 |显示全部楼层 |坛友微信交流群
木子星 发表于 2016-10-31 19:29
楼主没有提到,单观测的是否要按照大小排,提供一段不按大小排的代码,见笑。
要是一个id里面不止两条观测呢?想请问下,用retain还可以进行操作吗

使用道具

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

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

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

GMT+8, 2024-4-19 10:03