我在SAS中有一个数据集,可以这样说: ID,班级,组别
组{{1,2,3,4}”有4个值,而类{Class1,...,Class n}的数目不确定。
为每个小组找到最新课程的最快方法是什么?
我可以看到两个选项,使用Proc freq
或类似
proq sql;
Select count(*)
From Have
group by group, class;
并在每个组取最大值之后。但是我不确定该怎么办。
我说的最快,但更多是关于效率的问题,我正在一张1000万行的大桌子上工作,而我却经常这样做
答案 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;