楼主: forwings
2244 11

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

  • 0关注
  • 0粉丝

高中生

52%

还不是VIP/贵宾

-

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

+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
拉您进交流群

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

GMT+8, 2024-4-27 18:24