全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1009 6
2022-01-05
我的数据大致是这样的:
data disease;
  input id disease1 disease2 disease3 disease4 disease5 disease6 disease7 disease8 disease9 disease10 disease11 disease12 disease13 disease14 disease15;
cards;
1 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1
2 0 1 1 0 1 0 1 0 0 1 0 0 1 0 1
3 1 0 0 0 1 0 0 0 1 0 1 0 1 1 1
4 0 0 1 0 1 0 1 0 1 0 1 0 0 0 1
.....
;
run;
患有某种疾病就编码1,不患有该种疾病就编码0。现在我想知道某个人患有的疾病组合,如果第一个人患有第一种和第二种疾病,就这样编码:disease1_2=1, 如果第一个人患有第一种、第二种和第三种疾病,就这样编码:disease1_2_3=1, 一共15种疾病,疾病组合太多了,有什么简便的方法吗,求大神指导!谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2022-1-5 20:27:51
proc transpose data=a out=b(rename=(_name_=disease col1=value));
by id;
run;

data c;
  length diseaseall $200;
  set b;
        by id;
        retain diseaseall;
        disease=compress(disease,,'a');
        if first.id then diseaseall='disease';
        if value=1 then diseaseall=catx('_',diseaseall,disease);
        if last.id;
                                n=1;
                                drop disease value;
run;

proc transepose data=c out=d;
by id;
id diseaseall;
var n;
drop _name_;
run;

二维码

扫码加我 拉你入群

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

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

2022-1-5 20:29:20
先将数据转置再做retain变量实现的,不知道是否是所需要的格式...
二维码

扫码加我 拉你入群

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

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

2022-1-5 20:39:46
用数组会简单些。。
data b;
  length diseaseall $200;
  set a;
  array disease{15};
        retain diseaseall;
        diseaseall='disease';
        do i=1 to 15;
  if disease{i}=1 then diseaseall=catx('_',diseaseall,i);
        if i=15 then output;
        end;
        drop disease1-disease15 i;
run;
二维码

扫码加我 拉你入群

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

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

2022-1-5 20:59:14
HXAI102230 发表于 2022-1-5 20:27
proc transpose data=a out=b(rename=(_name_=disease col1=value));
by id;
run;
谢谢!太厉害了!
二维码

扫码加我 拉你入群

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

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

2022-1-5 20:59:34
HXAI102230 发表于 2022-1-5 20:29
先将数据转置再做retain变量实现的,不知道是否是所需要的格式...
谢谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群