【发布时间】:2020-06-17 09:16:20
【问题描述】:
我有一个数据集:
data have;
input group $ value;
datalines;
A 4
A 3
A 2
A 1
B 1
C 1
D 2
D 1
E 1
F 1
G 2
G 1
H 1
;
run;
第一个变量是组标识符,第二个变量是值。
对于每个组,我想要一个新变量“sum”,其中包含列中所有值的总和,除了观察所在的组。
我的问题是必须对近 3000 万次观察进行此操作,因此效率很重要。 我发现使用 data step 比使用 procs 更有效。
最终的数据库应该是这样的:
data want;
input group $ value $ sum;
datalines;
A 4 11
A 3 11
A 2 11
A 1 11
B 1 20
C 1 20
D 2 18
D 1 18
E 1 20
F 1 20
G 2 18
G 1 20
H 1 20
;
run;
您知道如何执行此操作吗?
编辑:我不知道这是否重要,但我给出的示例是我的问题的简化版本。在实际情况中,我有 2 个其他组变量,因此取整列的总和并减去组中的总和不是一个可行的解决方案。
【问题讨论】:
-
关于“我发现使用数据步骤比使用 procs 更有效。”你试过什么代码? 30M 行中有多少个不同的组?
-
不是为了这个特定的任务,我正在计算大约 6000 万次观察的计数变量,不记得我在两年前使用的 proc,因为我使用过类似的任务数据步骤。在我开始使用 procs 时,我至少需要 2 个小时才能在不到 30 分钟的时间内对数据步骤执行相同的操作。问题可能是内存,计算是在内存只有 8gb 的服务器上进行的(不可能添加更多)。
-
数据是否总是按
group预排序? -
拥有多个分组变量会如何改变你想要的?你是说在这种情况下你想要多个 sum 变量?