Sas 将一个变量与另外两个变量求平均值
假设我有以下数据库:Sas 将一个变量与另外两个变量求平均值,sas,Sas,假设我有以下数据库: DATA have; INPUT id date gain; CARDS; 1 201405 100 2 201504 20 2 201504 30 2 201505 30 2 201505 50 3 201508 200 3 201509 200 3 201509 300 ; RUN; 我想创建一个新表want,其中变量gain的平均值按id和date分组。最终的数据库应如下所示: DATA want; INPUT id date average_gain; CARDS
DATA have;
INPUT id date gain;
CARDS;
1 201405 100
2 201504 20
2 201504 30
2 201505 30
2 201505 50
3 201508 200
3 201509 200
3 201509 300
;
RUN;
我想创建一个新表want
,其中变量gain
的平均值按id
和date
分组。最终的数据库应如下所示:
DATA want;
INPUT id date average_gain;
CARDS;
1 201405 100
2 201504 25
2 201505 40
3 201508 200
3 201509 250
我尝试使用下面的代码获得所需的结果,但没有成功:
PROC sql;
CREATE TABLE want as
SELECT *,
mean(gain) as average_gain
FROM have
GROUP BY id, date
ORDER BY id, date
;
QUIT;
是星号引起了这个问题。这将解析为
id、日期、增益
,这不是您想要的。ANSI SQL不允许这种类型的功能,因此这是SAS与其他SQL实现不同的一种方式。
日志中应该有一个关于重新融合原始数据的注释,这基本上就是正在发生的事情。汇总值将重新合并到每一行
为了避免这种情况,请在查询中按字段列出分组,它将按预期工作
PROC sql;
CREATE TABLE want as
SELECT id, date,
mean(gain) as average_gain
FROM have
GROUP BY id, date
ORDER BY id, date
;
QUIT;
我会说,一般来说,PROC MEANS通常是一个更好的选择,因为:
- 计算多个变量和统计信息,无需多次列出所有变量和统计信息
- 可以获得多个级别的结果,例如总计、id和组级别的总计
- 并非所有统计数据都可以在PROC平均值内计算
- 支持变量列表,因此您可以在没有任何问题的情况下快捷引用长列表