SAS_Count频率

时间:2017-07-01 17:46:09

标签: sas

我想问一个关于SAS编程的复杂(对我而言)问题。我想通过使用简单的例子我可以更好地解释。所以,我有以下数据集:

 Group          Category 
 A                  1
 A                  1
 A                  2
 A                  1
 A                  2
 A                  3
 B                  1
 B                  2
 B                  2
 B                  1
 B                  3
 B                  2

我想计算每个组的每个类别。我可以使用PROC FREQ来做到这一点。但这对我的数据集来说并不是更好的方法。这对我来说很耗时,因为我的数据集太大而我拥有大量的群组。因此,如果我使用PROC FREQ,首先我需要为每个组创建新的数据集,然后为每个组使用PROC FREQ。总而言之,我需要创建以下数据集:

                               CATEGORIES 
 Group     1   (first category)         2             3                                                                    
 A         3                            2             1
 B         2                            3             1

因此,A组中第一类的数量为3.B组中第一类的数量为2,依此类推。我想我可以解释一下。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

SAS中有多种方法可以做到这一点。我的偏见是proc sql,所以:

proc sql;
    select grp,
           sum(case when category = 1 then 1 else 0 end) as cat_1,
           sum(case when category = 2 then 1 else 0 end) as cat_2,
           sum(case when category = 3 then 1 else 0 end) as cat_3
    from t
    group by grp;

答案 1 :(得分:0)

proc freqproc summary可以完成生成频率计数的工作:

data example;
 length group category $1;
 input group category;
cards;
A 1
A 1
A 2
A 1
A 2
A 3
B 1
B 2
B 2
B 1
B 3
B 2
;
run;

proc freq data=example;
 table group*category;
run;

proc summary data=example nway;
 class group category;
 output out=example_frequency (drop=_type_);
run;

proc summary将生成一个“长”的数据集。格式。如果您需要转置它(我建议不这样做:您可能会发现在大多数情况下更容易使用长格式),您可以使用proc transpose

proc transpose data=example_frequency out=example_matrix (drop=_name_);
 by group;
 id category;
 var _freq_;
run;
相关问题