For the DATA step solution, sort by the grouping variable and use a BY statement to accumulate the absolute residuals.
Since you mentioned matrix algebra, I'll give a SAS/IML solution, which uses the UNIQUE-LOC technique to loop over the groups:
proc glm data=sashelp.class plots=none;
class sex;
model weight = height;
output predicted=yhat out=have(rename=(weight=y sex=grp) );
run;
proc iml;
use have;
read all var {grp y yhat};
close;
r = abs(y-yhat);
u = unique(grp);
sum = j(1, ncol(u));
do i = 1 to ncol(u);
idx = loc(grp = u[i]);
sum[i] = sum(r[idx]);
end;
print sum[colname=u];
If you have huge data or many groups, it is more efficient to use the UNIQUEBY tecnique to loop over the groups.
... View more