应用proc方法快速计算多个观测值



我有一个数据集,每个ID都有不同的观察结果,这些参与者也处于不同的治疗状态(组)。我想知道我是否可以使用proc方法快速计算每个小组的参与者人数和就诊次数?理想情况下,我可以使用proc means sum函数根据组状态快速捕获0和1的值,并获得总数?然而,我陷入了如何继续的困境。

ID Visit Group 
1  1     0
1  2     0
2  1     1
2  2     1
2  3     1
3  1     0
4  1     1
4  2     1
5  1     0
5  2     0
6  1     1
6  2     1
6  3     1
6  4     1

具体来说,我感兴趣的是1)每个小组状态下的参与者总数。在这种情况下,我们可以在对照组(0)中有3名参与者(ID:1,3和5),在治疗组(1)中有另外3名参与者。2) 每个组状态的访问总数。在这种情况下,对照组(0)的总就诊次数为5次(2+1+2=5),治疗组(1)的总访视次数为9次(3+2+4=9)。我想知道proc是否意味着过程可以帮助快速计算这些值?谢谢

是的,您可以使用proc means来获取计数。

data have;
input ID$ Visit Group;
cards;
1 1 0
1 2 0
2 1 1
2 2 1
2 3 1
3 1 0
4 1 1
4 2 1
5 1 0
5 2 0
;
run;
proc means data=have n;
class group id;
var visit;
types group id group*id;
run;

如果你想要visit的和;sum";在CCD_ 3和CCD_。

看起来GROUP是在ID级别而不是ID/VISIT级别分配的。在这种情况下,如果你想统计每组中ID的数量,你需要首先对每个ID进行一次观察。

proc sort data=have nodupkey out=unique_ids ;
by id;
run;

现在,您可以计算每组中有多少ID。正常方式是使用PROC FREQ.

proc freq data=unique_ids;
tables group;
run;

但您也可以使用PROC平均值/摘要进行计数。

proc summary data=unique_ids nway;
class group;
output out=counts N=N_ids ;
run;
proc print data=counts;
var group n_ids;
run;

MEANS不容易进行不同的计数,因此SQL在这里可能是一个更容易理解的选项。

proc sql;
create table want as
select group, count(*) as num_visits, count(distinct ID) as num_participants
from have
group by group
order by 1;
quit;

最新更新