gpt4 book ai didi

SAS:PROC FREQ 自动组合?

转载 作者:行者123 更新时间:2023-12-01 13:21:17 25 4
gpt4 key购买 nike

我有一个类似于下表的患者数据集,我想看看哪些疾病会一起发生并最终制作一个热图。我使用 PROC FREQ 来制作这个列表表,但是这样完成太费力了,因为它给了我每一个组合(数千)。

Moya    Hypothyroid Hyperthyroid    Celiac
1 1 0 0
1 1 0 0
0 0 1 1
0 0 0 0
1 1 0 0
1 0 1 0
1 1 0 0
1 1 0 0
0 0 1 1
0 0 1 1


proc freq data=new;
tables HOHT*HOGD*CroD*Psor*Viti*CelD*UlcC*AddD*SluE*Rhea*PerA/list;
run;

我最终想要一堆交叉表,如下所示,这样我就可以看到每个组合有多少患者。显然可以像这样手动复制粘贴每个变量,但有什么方法可以快速查看或自动执行此操作?

proc freq data=new;
tables HOHT*HOGD/list;
run;

proc freq data=new;
tables HOHT*CroD/list;
run;


proc freq data=new;
tables HOHT*Psor/list;
run;

谢谢!

最佳答案

可以使用TABLES 语句控制在PROC FREQ 中生成的表。要生成数据集中所有列对的 2-way 列联表,可以编写一个 SAS 宏来循环变量列表,并生成 TABLES 语句来创建所有正确的列联表。

例如,使用原始帖子中的数据:

data xtabs;
input Moya Hypothyroid Hyperthyroid Celiac;
datalines;
1 1 0 0
1 1 0 0
0 0 1 1
0 0 0 0
1 1 0 0
1 0 1 0
1 1 0 0
1 1 0 0
0 0 1 1
0 0 1 1
;
run;
%macro gentabs(varlist=);
%let word_count = %sysfunc(countw(&varlist));
%do i = 1 %to (&word_count - 1);
tables %scan(&varlist,&i,%str( )) * (
%do j = %eval(&i + 1) %to &word_count;
%scan(&varlist,&j,%str( ))
%end; )
; /* end tables statement */
%end;
%mend;
options mprint;
proc freq data = xtabs;
%gentabs(varlist=Moya Hypothyroid Hyperthyroid Celiac)
run;

SAS宏生成的代码是:

 73         proc freq data = xtabs;
74 %gentabs(varlist=Moya Hypothyroid Hyperthyroid Celiac)
MPRINT(GENTABS): tables Moya * ( Hypothyroid Hyperthyroid Celiac ) ;
MPRINT(GENTABS): tables Hypothyroid * ( Hyperthyroid Celiac ) ;
MPRINT(GENTABS): tables Hyperthyroid * ( Celiac ) ;
75 run;

...结果输出的前几张表如下所示:

enter image description here

要向 TABLES 语句添加选项,可以在注释为 /* end tables 语句 */ 的行的分号前添加代码。

关于SAS:PROC FREQ 自动组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49847180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com