SAS:如何在有条件的情况下折叠观察结果

SAS : How to collapse observations, while making a total, with a condition

我有一个看起来像这样的数据库:

DATA money;
INPUT id condition money;
CARDS;
1 1 453 
5 1 9812
1 1 543
2 0 6541
6 0 1345
2 0 1522
3 0 1546
4 0 9768
5 1 120
7 0 7543
;
RUN;

我想要一个table,也就是

我只能使用 retain 语句来完成第二部分,但我还没有找到包含条件的方法。

/* Sort into ID order */
proc sort data=money out=money2 ;
  by id ;
run ;

data money_out ;
  set money2 ;
  by id ;
  retain total . ;
  if first.id then total = 0 ; /* If first ID then set total = 0 */

  if condition = 0 then output ; /* Output all condition = 0 records */
  else do ;
    total + money ; /* increment total */
    if last.id then do ;
      money = total ;
      output ; /* Output on last ID record */
    end ;
  end ;
  drop total ;
run ;

Proc sql 也可能是一个解决方案。

proc sql;
    create table money_sum as 
    (select * 
    from money 
    where condition = 0
    union all
    select id, condition, sum(money) as money 
    from money 
    where condition = 1 
    group by id, condition)
    order by id;
quit;

现在要做的是分别创建两个集合,然后将它们与集合操作结合起来。