繁体   English   中英

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

[英]Getting the most present class by group in SAS

我在SAS中有一个数据集,可以说:ID,类,组

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

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

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

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

并在每组最多之后服用。 但是我不知道该怎么办..

编辑

我说最快,但更多是关于效率,我正在一张1000万行的大桌子上工作,而且我经常跑

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

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM