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