楼主: ddd524
820 6

[问答] 求助:如何知道某个人群患有的所有疾病组合 [推广有奖]

  • 0关注
  • 0粉丝

本科生

34%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0.6275
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
245 点
帖子
8
精华
0
在线时间
168 小时
注册时间
2020-1-14
最后登录
2023-3-2

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我的数据大致是这样的:
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种疾病,疾病组合太多了,有什么简便的方法吗,求大神指导!谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:disease cards Input ease card

回帖推荐

HXAI102230 发表于4楼  查看完整内容

用数组会简单些。。 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;

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

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 tran ...
沙发
HXAI102230 在职认证  发表于 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;

使用道具

藤椅
HXAI102230 在职认证  发表于 2022-1-5 20:29:20 |只看作者 |坛友微信交流群
先将数据转置再做retain变量实现的,不知道是否是所需要的格式...

使用道具

板凳
HXAI102230 在职认证  发表于 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;

使用道具

报纸
ddd524 发表于 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;
谢谢!太厉害了!

使用道具

地板
ddd524 发表于 2022-1-5 20:59:34 |只看作者 |坛友微信交流群
HXAI102230 发表于 2022-1-5 20:29
先将数据转置再做retain变量实现的,不知道是否是所需要的格式...
谢谢!

使用道具

7
ddd524 发表于 2022-1-5 21:04:32 |只看作者 |坛友微信交流群
HXAI102230 发表于 2022-1-5 20:39
用数组会简单些。。
data b;
  length diseaseall $200;
非常感谢!!

使用道具

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

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

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

GMT+8, 2024-4-28 07:35