我在SAS Enterprise Guide中的proc-sql中有如下查询:
proc sql;
select
event
, mnth
, value
from table1
order by mnth, name
;quit;
上面的proc-sql查询给出的结果如下:
event| mnth | value
-----|-------|-------
ABC | APRIL | 3E-6
ABC | APRIL | 0,27950
ABC | APRIL | 0,556
ABC | MAY | 0,228
... | ... | ...
我需要创建一个新的列,其中将显示每mnth的值的总和,因此我需要下面这样的东西(当然,如果可能的话,我们也应该考虑像"3E-6"这样的值(:
event| mnth | value | sum
-----|-------|---------|-----
ABC | APRIL | 3E-6 |
ABC | APRIL | 0,27950 |
ABC | APRIL | 0,556 | 0,8355
ABC | MAY | 0,228 | 0,228
... | ... | ... | ...
如何在proc-sql中修改我的代码以达到上面的结果?
数据步骤会更容易。下面的代码对每组中每个月的值进行累积求和,然后仅在最后一个月输出结果。
data want;
set have;
by event mnth;
if(first.mnth) then s = 0;
s+value;
if(last.mnth) then sum = s;
drop s;
run;
事件 | mnth> | 值 | 总和|
---|---|---|---|
ABC | 四月 | 3E-6 | |
ABC | |||
ABC | 四月 | 0.556 | 0.835503 |
ABC | 5月 | 0.228 | 0.228 |
如果你真的想在proc SQL中完成,你可以这样做:
proc SQL;
select *, sum(value) as sum
from table1
group by mnth
order by mnth
;
run;
您可以在每一行中得到您的和(并且在数据步骤中只在最后一行中获得和要容易得多(。但是您应该注意您的值列是数字列。如果没有,您应该将其更改为一个:要么在表生成时,要么使用INPUT函数。