楼主: forwings
2689 11

[问答] 求助,关于data step数据整理,合并观测值删除重复变量 [推广有奖]

  • 0关注
  • 0粉丝

高中生

52%

还不是VIP/贵宾

-

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

楼主
forwings 发表于 2016-4-25 21:15:24 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
如题。
数据如下:
ID  C  c1  c2  c3
1   o   0    .    .
1   o   .    1   .
1   o   .    .   2
1   I   0   .   .
1   I   .   2   .
1   I   .   .   4
2   o  0  .   .
2   o  .   1  .
2   o  .  .   2
希望整理为:
ID   C   C1   C2   C3
1     o   0    1     2
1     i    0    2     4
2     o   0    1     2
求大神支招或者提供思路。

数据输入代码:
data test;
input  id  c  $  c1 c2 c3 @@;
cards;
1   o   0    .    .
1   o   .    1   .
1   o   .    .   2
1   I   0   .   .
1   I   .   2   .
1   I   .   .   4
2   o  0  .   .
2   o  .   1  .
2   o  .  .   2

;
run;

二维码

扫码加我 拉你入群

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

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

关键词:Data step Step 数据整理 Data 观测值

沙发
dogmamongo 发表于 2016-4-25 23:24:55
proc means data=test;
   var c1 c2 c3;
   by id c;
   output out=new(drop=_type_ _freq_) max=c1 c2 c3;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
Amandanannn 发表于 2016-4-26 05:31:14
dogmamongo 发表于 2016-4-25 23:24
proc means data=test;
   var c1 c2 c3;
   by id c;
这之前是不是要先sort一下下儿呢? 可以在此之前加上下面的code:
proc sort data=test;
by id c;
run;

板凳
Amandanannn 发表于 2016-4-26 05:35:46
其实楼上已经给出了很简洁、很棒的coding了!
下面是另一种方法,用Data Step去做,供参考,也欢迎各位大侠、高手指正!

data test_1 (drop=c1 c2 c3 i);
set test;
array Cs(3) c1-c3;
do I=1 to 3;
if not missing (Cs(I)) then do;
Number=Cs(I);
output;
end;
end;
run;

proc transpose data=test_1 out=test_get (drop=_name_) prefix=c;
by id c;
var Number;
run;

希望会对你有所帮助,加油![em44]
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

报纸
shen36 发表于 2016-4-26 08:36:13
thank you

地板
forwings 发表于 2016-4-26 09:07:59
dogmamongo 发表于 2016-4-25 23:24
proc means data=test;
   var c1 c2 c3;
   by id c;
哇,好思路!可是如果c1-c3是字符串呢?

7
forwings 发表于 2016-4-26 09:09:26
Amandanannn 发表于 2016-4-26 05:35
其实楼上已经给出了很简洁、很棒的coding了!
下面是另一种方法,用Data Step去做,供参考,也欢迎各 ...
哇。这个好。因为如果c1-c3是字符型变量的话proc mean就搞不定了

8
孤单的我们 发表于 2016-4-26 09:22:35
  1. proc sort data=test;by id c;run;

  2. proc sql noprint;
  3.         create table want as
  4.         select distinct id,c,max(c1) as c1,max(c2) as c2,max(c3) as c3
  5.                 from test group by id,c;
  6. quit;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 20 热心帮助其他会员
5傻小不点 + 1 + 1 + 1 热心帮助其他会员

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

9
冯枫Fery 在职认证  发表于 2016-4-26 09:32:55

proc sql;
    create table test_1 as
    select id,c,max(c1) as c1,max(c2) as c2,max(c3) as c3 from test group by id,c;
quit;

这个可以么

10
冯枫Fery 在职认证  发表于 2016-4-26 09:33:53
孤单的我们 发表于 2016-4-26 09:22
想一块去了

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

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