将类别列为标签

时间:2015-07-21 08:10:49

标签: sas

我正在尝试生成一个包含每个组的总计的表。 我有部分,小节和项目。每个小节后 应该出现一个包含此子节总数的行 在每个部分后面都有一个部分总计。

我尝试使用proc tabulate,但小计名称只是Sum或其他固定标签。我想使用小计名称作为小计。

示例1

首先举一个小例子来说明,下面我有一个完整的运行示例 这显示了我尝试使用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
=================== 

示例2

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
;

1 个答案:

答案 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;

我在这里添加了group2group1,并删除了一堆标签。由于某种原因,它不会删除所有标签,但它会删除大部分标签,并将您的group2 / group1放在右侧。

它还会发出警告:

  

警告:类变量在第313行的表语句中与自身交叉。这可能会导致不可预测的结果。

这很好,在这种情况下,但要注意它(特别是如果你的商店是'干净的日志'商店;在这种情况下这可能不起作用。)

除此之外,我认为您必须转到PROC REPORT才能获得,这很可能(例如,REPORT很乐意使用RBREAK进行小计行。)