在SAS中按组获取最新的课程

时间:2019-03-14 09:58:56

标签: group-by count sas

我在SAS中有一个数据集,可以这样说: ID,班级,组别

组{{1,2,3,4}”有4个值,而类{Class1,...,Class n}的数目不确定。

为每个小组找到最新课程的最快方法是什么?

我可以看到两个选项,使用Proc freq或类似

proq sql; 
Select count(*)
From Have
group by group, class; 

并在每个组取最大值之后。但是我不确定该怎么办。

编辑

我说的最快,但更多是关于效率的问题,我正在一张1000万行的大桌子上工作,而我却经常这样做

1 个答案:

答案 0 :(得分:2)

以下逐步方法是一种方法:

data have;
   input group :      8.
         class : $char8.
   ;

   datalines;
1 class1
1 class1
1 class2
1 class3
2 class2
2 class2
2 class2
2 class3
3 class1
3 class2
3 class3
3 class3
;

/* get frequencies */
proc freq data = have noprint;
   tables group*class / out=tmp_freq;
run;

proc sort data = tmp_freq;
   by group count;
run;

data want;
   set tmp_freq;
   by group count;

   if last.group;
run;

结果是

Group     Class   Count    Percent
    1    class1       2       16.6
    2    class2       3         25
    3    class3       2       16.6

根据评论中的问题进行编辑:

  

在最终表上,百分比来自整个数据,您认为   我们可以按班上课吗?

data want2(keep = group class max_count percent_for_group);
   /* process data by group */
   do until(last.group);
      set tmp_freq;
      by group;

      if count gt max_count then
         max_count = count;

      sum_count = sum(sum_count,count);
   end;

   percent_for_group = max_count * 100 / sum_count;
run;