Sas 分组子项并显示父项和
我有下表Sas 分组子项并显示父项和,sas,Sas,我有下表 +-------+--------+---------+ | group | item | value | +-------+--------+---------+ | 1 | a | 10 | | 1 | b | 20 | | 2 | b | 30 | | 2 | c | 40 | +-------+--------+---------+ 我想按分组,将分组后的总
+-------+--------+---------+
| group | item | value |
+-------+--------+---------+
| 1 | a | 10 |
| 1 | b | 20 |
| 2 | b | 30 |
| 2 | c | 40 |
+-------+--------+---------+
我想按分组
,将分组后的总和插入值
,然后取消分组:
+-------+--------+
| item | value |
+-------+--------+
| 1 | 30 |
| a | 10 |
| b | 20 |
| 2 | 70 |
| b | 30 |
| c | 40 |
+-------+--------+
结果的目的是将第一列解释为属于第1组的项目a和b,总和为30,以及属于第2组的项目b和c,总和为70。我假设
组和项目都是字符变量
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;
这种数据转换可以表示报告要求,而不是下游处理的有用数据结构<代码>过程报告
可以以所需的形式创建输出
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;