排序变量和过程报告

Sorting variables and proc report

我有以下形式的数据集:

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 报告过程中快速完成此操作而不会弄乱初始数据集的方法?或者即使这是不可能的,是否有一种快速的方法可以有效地对其进行适当的排序?我想到的唯一方法是对每个组单独排序,然后合并排序的数据集,这太费时间了。

您只需要确保每一行都有所有要排序的东西。在这种情况下,您只需要添加两件事:将该总数或 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;