楼主: yu9954
1119 7

[问答] 如何找出频数最高的几个变量的组合? [推广有奖]

  • 0关注
  • 1粉丝

大专生

73%

还不是VIP/贵宾

-

威望
0
论坛币
820 个
通用积分
2.0765
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
660 点
帖子
35
精华
0
在线时间
50 小时
注册时间
2018-11-22
最后登录
2023-10-23

30论坛币

我有一个数据集,也是用unique study ID表示每一个人,每一个人有一行自己的观测值,变量为这个人使用过的所有药物,共有300多个不同的表示药物的变量,使用过该药物的,变量赋值为“1”,没有使用过的赋值为“0”,有大约100万个observation, 想从其中找出这些人群中常用的药物的组合(药物任意两种,三种,四种,五种的组合),找出这些组合的频数。

数据集节选如下:
N02aa。。。。这些变量表示不同的药物名,左边的数字表示这些人的study ID

想找出比如n02aa和n02ab(两种)同时都为1的有多少个人,或者n02aa n02ab n02ae(三种)同时都为1的有多少个人

求大神们指点!万分感谢!

Screen Shot 2020-06-02 at 5.40.48 PM.png

Screen Shot 2020-06-02 at 5.30.34 PM.png (307.98 KB)

Screen Shot 2020-06-02 at 5.30.34 PM.png

最佳答案

jg.sas 查看完整内容

data a; input subjid 字符4. n02aa n02ab n02ae; cards; 1154 1 0 1 1155 1 1 1 1156 1 0 0 1157 0 1 0 1158 1 1 0 1159 1 1 1 1160 1 1 1 ; run; data bb; length all $32766; set a; /* all="";*/ array num _numeric_; do over num; /* if num=1 then all=cats(vlabel(num),all);*/ all=cats(vval ...
关键词:observation observat unique study ATION
沙发
jg.sas 发表于 2020-6-3 05:45:23 |只看作者 |坛友微信交流群
data a;
input subjid 字符4.   n02aa n02ab n02ae;
cards;
1154 1   0   1
1155 1   1   1
1156 1   0   0
1157 0   1   0
1158 1   1   0
1159 1   1   1
1160 1   1   1
;
run;

data bb;
        length all $32766;
        set a;
/*        all="";*/
        array num _numeric_;
        do over num;
/*                if num=1 then all=cats(vlabel(num),all);*/
                all=cats(vvalue(num),all);
        end;
run;

proc freq data=bb;
        table all/out=cc;
run;

使用道具

藤椅
wang1839 在职认证  发表于 2020-6-4 11:50:30 |只看作者 |坛友微信交流群
data a;
input subjid   n02aa n02ab n02ae;
cards;
1154 1   0   1
1155 1   1   1
1156 1   0   0
1157 0   1   0
1158 1   1   0
1159 1   1   1
1160 1   1   1
;
run;


proc sql;
create table b as select count(unique subjid) as n, n02aa, n02ab, n02ae from a where  n02aa=1 & n02ab=1 & n02ae=1;
quit;

使用道具

板凳
whymath 发表于 2020-6-4 19:36:24 |只看作者 |坛友微信交流群
你要找的是关联规则分析吗,请看此例:
[https://blog.csdn.net/Tiaaaaa/article/details/58615565]

使用道具

报纸
yu9954 发表于 2020-6-5 03:08:47 |只看作者 |坛友微信交流群
wang1839 发表于 2020-6-4 11:50
data a;
input subjid   n02aa n02ab n02ae;
cards;
这个数据集中variable有很多 (300个左右),不知道该怎么写一段macro实现两两variable的组合呢? 而不仅仅是给出的例子,我自己写了一段,有3w多个组合。。。运行到一半系统提示没有空间显示了

使用道具

地板
jg.sas 发表于 2020-6-8 09:04:57 |只看作者 |坛友微信交流群
基本思路:transpose之后(注意排序),为1的数据catx起来,一个人做成一条,然后proc freq算频数

使用道具

7
jg.sas 发表于 2020-6-8 09:19:01 |只看作者 |坛友微信交流群
data a;
input subjid   n02aa n02ab n02ae;
cards;
1154 1   0   1
1155 1   1   1
1156 1   0   0
1157 0   1   0
1158 1   1   0
1159 1   1   1
1160 1   1   1
;
run;

data bb;
        length all $32766;
        set a;
/*        all="";*/
        array num _numeric_;
        do over num;
                if num=1 then all=cats(vlabel(num),all);
        end;
run;

proc freq data=bb;
        table all/out=cc;
run;

**这里的all也可以直接不用判断条件直接用数字组成二进制编码的样式,这样数据量会小一点:

使用道具

8
jg.sas 发表于 2020-6-8 09:24:08 |只看作者 |坛友微信交流群
jg.sas 发表于 2020-6-8 09:22
data a;
input subjid 字符4.   n02aa n02ab n02ae;
cards;
$为特殊字符打不出来

使用道具

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

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

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

GMT+8, 2024-5-7 02:00