
[英]SQL GROUP BY: Getting the most recently updated record for an indexed view
[英]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.