我有一个数据集,每个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;