0

我有以下形式的数据集:

GROUP 1  GROUP 2   TOTAL
  A                 400
  A        a1       100
  A        a2       100
  A        a3       300
  B                 300
  B        b1       400
  B        b2       200
  C                 350
  C        c1       100
  C        c2       500

GROUP 1 和 GROUP 2 是字符变量,TOTAL 是数字变量。字符变量按字母顺序排序,但不按变量 TOTAL 排序。

我希望通过降低频率(TOTAL 变量)在组内(首先是 GROUP 1)对其进行排序。如果相同的组具有相同的频率,则适用字母顺序。所以输出应该是这样的:

GROUP 1  GROUP 2   TOTAL
  A                 400
  A        a3       300
  A        a1       100
  A        a2       100
  C                 350
  C        c2       500
  C        c1       100
  B                 300
  B        b1       400
  B        b2       200

是否有一种快速的方法可以在 proc 报告过程中执行此操作而不会弄乱初始数据集?或者即使这是不可能的,是否有一种快速的方法可以有效地对其进行适当的排序?我想到的唯一方法是为每个组单独排序,然后合并排序的数据集,这需要太多时间。

4

1 回答 1

1

您只需要确保每一行都有所有要排序的东西。在这种情况下,您只需要添加两件事:将该总数或 group2=' ' 上的任何内容下拉到该 Group1 的每隔一行,然后确定那些顶部行以使其保持在顶部。然后你就可以正确排序了。

PROC REPORT可能也可以使用相同的want数据集执行此操作,但是如果没有显示您正在做什么的代码,则很难提供该功能-但概念基本相同。

data have;
input GROUP1  $ GROUP2   $ TOTAL;
datalines;
  A         .        400
  A        a1       100
  A        a2       100
  A        a3       300
  B         .       300
  B        b1       400
  B        b2       200
  C         .       350
  C        c1       100
  C        c2       500
;;;;
run;

data for_sort;
  set have;
  retain total_group;
  if missing(group2) then total_group=total;
  if missing(group2) then topgroup = 1;
  else topgroup = 2;
run;

proc sort data=for_sort out=want;
  by descending total_group group1 topgroup descending total group2;
run;
于 2021-08-15T14:15:57.213 回答