我正在尝试生成一个包含每个组的总计的表。 我有部分,小节和项目。每个小节后 应该出现一个包含此子节总数的行 在每个部分后面都有一个部分总计。
我尝试使用proc tabulate
,但小计名称只是Sum或其他固定标签。我想使用小计名称作为小计。
首先举一个小例子来说明,下面我有一个完整的运行示例 这显示了我尝试使用proc tablulate以及我想要实现的目标。
输入数据
==============================
Group Group2 Item Weight
----- ------ ---- ------
Mammals Cats Lion 215
Mammals Cats Cheetah 70
Mammals Dogs Wolf 80
Mammals Dogs Jackal 45
==============================
期望的结果
===================
Group/Item Weight
----------- ------
Lion 215
Cheetah 70
Cats 285
----------- ------
Wolf 80
Jackal 45
Dogs 125
----------- ------
Mammals 410
===================
SAS代码中的一个稍长的例子 其中还包括缺失值
data animals;
input group1 $ group2 $ animal $ weight;
datalines;
Mammals Cats Lion 215
Mammals Cats Cheetah 70
Mammals Cats Leopard 65
Mammals Dogs Wolf 80
Mammals Dogs Jackal 45
Birds Raptors Eagle 6
Birds Raptors Hawk 5
Birds . Duck 2
. . Snake 3
;
我的尝试不成功,桌子太复杂了
PROC TABULATE DATA=ANIMALS OUT=ANIMAL_SUMMARY;
VAR weight;
CLASS group1 / ORDER=DATA MISSING;
CLASS group2 / ORDER=DATA MISSING;
CLASS animal / ORDER=DATA MISSING;
TABLE group1*(group2*(animal Sum) Sum) Sum, weight;
RUN;
接近所需结果的数据形式
data target;
input group1 $ group2 $ animal $ weight;
datalines;
. . Lion 215
. . Cheetah 70
. . Leopard 65
. Cats . 350
. . Wolf 80
. . Jackal 45
. Dogs . 125
Mammals . . 475
. . Eagle 6
. . Hawk 5
. Raptors . 11
. . Duck 2
Birds . . 13
. . Snake 3
. . . 491
;
答案 0 :(得分:1)
我认为你不能从TABULATE得到完全你想要的东西。你可能不得不去报告以获得你想要的东西。
但你可以近距离接触。
PROC TABULATE DATA=ANIMALS OUT=ANIMAL_SUMMARY;
VAR weight;
CLASS group1 / ORDER=DATA MISSING;
CLASS group2 / ORDER=DATA MISSING;
CLASS animal / ORDER=DATA MISSING;
TABLE group1*(group2*(animal=' ' Sum=' '*group2=' ') Sum=' '*group1=' ') Sum='Total', weight;
RUN;
我在这里添加了group2
和group1
,并删除了一堆标签。由于某种原因,它不会删除所有标签,但它会删除大部分标签,并将您的group2 / group1放在右侧。
它还会发出警告:
警告:类变量在第313行的表语句中与自身交叉。这可能会导致不可预测的结果。
这很好,在这种情况下,但要注意它(特别是如果你的商店是'干净的日志'商店;在这种情况下这可能不起作用。)
除此之外,我认为您必须转到PROC REPORT
才能获得,这很可能(例如,REPORT很乐意使用RBREAK
进行小计行。)