跨行添加SAS

跨行添加SAS,sas,Sas,附件是一个数据集示例,其中ID#列具有一些相同的值,但美元金额列具有相同ID#的不同值。如何在ID相同的行中添加美元金额,并为该ID创建一个摘要行?列表比这个长得多,因此不能指定每个ID 也有SQL选项,但这是在数据步骤中执行运行总计/求和的方式 data have; input id $1. dollar_amount 8.; format dollar_amount dollar25.; cards; 1 24 2 53 2 67 3 35 4 86 5 245 6

附件是一个数据集示例,其中ID#列具有一些相同的值,但美元金额列具有相同ID#的不同值。如何在ID相同的行中添加美元金额,并为该ID创建一个摘要行?列表比这个长得多,因此不能指定每个ID


也有SQL选项,但这是在数据步骤中执行运行总计/求和的方式

data have;
input id $1. dollar_amount 8.;
format dollar_amount dollar25.;
cards;
1   24
2   53
2   67
3   35
4   86
5   245
6   353
6   56
7   21
;
run;

proc sort data=have noequals; /*Only run if not already sorted*/
by id;
run;

data want(drop=dollar_amount);
set have;
by id;
if first.id then dollar_total = .;
format dollar_total dollar25.;
dollar_total + dollar_amount;
if last.id then output;
run;

如果您不想使用PROC SQL,并且希望在输入数据中包含实际的摘要行(我想这就是您要问的),下面是一些简单的数据步骤,它们使用一个标志来标识摘要行:

data have;
input id $1. dollar_amount 8.;
format dollar_amount dollar25.;
cards;
1   24
2   53
2   67
3   35
4   86
5   245
6   353
6   56
7   21
;
run;

proc means data = have noprint;
    by id;
    var dollar_amount;
    output out=sum_data (drop=_type_ _freq_) sum=dollar_amount ;
run;

data sum_data; set sum_data;
    sum_row=1;
run;

data final;
    set have sum_data;
run;

proc sort data = final;
    by id sum_row;
run;
如果您只需要通过唯一ID生成和的输出数据集,则只需使用以下内容:

proc means data = have noprint;
    by id;
    var dollar_amount;
    output out = want (drop=_type_ _freq_) sum=dollar_amount_sum;
run;

和PROC-SQL等价物

data have;
input id $1. dollar_amount 8.;
format dollar_amount dollar25.;
cards;
1   24
2   53
2   67
3   35
4   86
5   245
6   353
6   56
7   21
;
run;


proc Sql;
create table want as
  Select 
ID,
sum(dollar_amount) as dollar_amount format dollar25.

  from have
group by ID
  ;
quit;