1

我有下表

+-------+--------+---------+
| group | item   |  value  |
+-------+--------+---------+
|   1   |   a    |   10    |
|   1   |   b    |   20    |
|   2   |   b    |   30    |
|   2   |   c    |   40    |
+-------+--------+---------+

我想按 对表进行group分组,将分组的总和插入value,然后取消分组:

+-------+--------+
| item  | value  |
+-------+--------+
|   1   |   30   |
|   a   |   10   |
|   b   |   20   |
|   2   |   70   |
|   b   |   30   |
|   c   |   40   |
+-------+--------+

结果的目的是将第一列解释为属于第 1 组的项目 a 和 b,总和为 30,而项目 b 和 c 属于第 2 组,总和为 70。

4

2 回答 2

2

这种数据转换可以指示报告要求,而不是用于下游处理的有用数据结构。 Proc REPORT可以以所需的形式创建输出。

data have;
infile datalines;
input group $ item $ value @@; datalines;
 1 a 10   1 b 20   2 b 30   2 c 40  
;

proc report data=have;
  column group item value;
  define group / order order=data noprint;
  break before group / summarize;
  compute item;
    if missing(item) then item=group;
  endcomp;
run;

在此处输入图像描述

于 2020-03-04T11:27:54.480 回答
0

我假设groupitem都是字符变量

data have;
infile datalines firstobs=4 dlm='|';
input group $ item $ value;
datalines;
+-------+--------+---------+
| group | item   |  value  |
+-------+--------+---------+
|   1   |   a    |   10    |
|   1   |   b    |   20    |
|   2   |   b    |   30    |
|   2   |   c    |   40    |
+-------+--------+---------+
;

data want (keep=group value);
    do _N_=1 by 1 until (last.group);
        set have;
        by group;
        v + value;
    end;
    value = v;output;v=0;
    do _N_=1 to _N_;
        set have;
        group = item;
        output;
    end;
run;
于 2020-03-04T10:30:39.320 回答