SAS,按组求和 [英] SAS, sum by group

查看:67
本文介绍了SAS,按组求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过 var1 计算总和.你能不能用两种方法来计算.SQL 和数据步骤与 if first.var1.

I want to calculate the sum by var1. Could you use two methods to do the calculation. SQL and data step with if first.var1.

data have;
input var1 var2$ var3;
datalines;

1 a 3
1 a 4
1 a 3
2 b 5
2 b 3
3 c 1
;
run;

data want;
input var1 var2 $ var3 sum_by_var1;
datalines;

1 a 3 10
1 a 4 10
1 a 3 10
2 b 5 9
2 b 3 9
3 c 1 9
;
run;

我的两种方式:

下面的代码适用于这个小数据集,但我想知道它是否适用于大数据集,因为很难检查结果.

The code below works on this small data set, but I wonder if it will work on large data sets because it is hard to check the results.

proc sql;
 create table new as 
 select 
 *
 ,sum(var3) as sum_by_var1
 from have
 group by var1
 order by var1
 ;
run;

下面的代码不起作用

data new2;   
   set have;       
   by var1; 
   if first.var1 then
   by_var1 + var3;
run;

推荐答案

要使用需要使用的数据步骤修正计算:

To fix your calculation using the data step you need to use:

  1. Retain 关键字,用于计算 var1 的总和,
  2. Output 关键字只输出一次 var1 的和;那是到达 var1 的最后一个观察值时,
  3. 如果您想要分离的数据,您必须重新连接到您的 Have 表.
  1. Retain keyword to calculate the sum by var1,
  2. Output keyword to output only once sum by var1 is calculated; that's when reaching the last observation for var1,
  3. If you want the segregated data you have to join back to your Have table.

修复:

data new2;   
   set have;       
   by var1; 
   retain sum_by_var1;
   if first.var1 then do; sum_by_var1=0; end;
   sum_by_var1 + var3;
   if last.var1 then do; output; end;
run;

输出:

var1=1 var2=a var3=3 sum_by_var1=10 
var1=2 var2=b var3=3 sum_by_var1=8 
var1=3 var2=c var3=1 sum_by_var1=1 

这篇关于SAS,按组求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆