sas - 使用 proc sql 对数据集进行多次求和
问题描述
我的数据
data mydata;
input
Category $
Item
type
amount;
datalines;
A 1 100 11111
A 2 900 11111
A 3 123 11111
B 1 113 11111
B 2 900 11111
C 1 111 11111
C 2 900 11111
;
我的尝试
proc sql;
create table want as
select *, sum(amount and item <> 900) as without900, sum(amount) as total from mydata
group by category
;
quit;
结果
Category Item type amount without900 total
A 3 123 11111 3 33333
A 1 100 11111 3 33333
A 2 900 11111 3 33333
B 2 900 11111 2 22222
B 1 113 11111 2 11111
C 2 900 11111 2 11111
C 1 111 11111 2 11111
预期结果
Category Item type amount without900 total
A 3 123 11111 22222 33333
A 1 100 11111 22222 33333
A 2 900 11111 22222 33333
B 2 900 11111 11111 22222
B 1 113 11111 11111 11111
C 2 900 11111 11111 11111
C 1 111 11111 11111 11111
我知道这可以通过创建另一个表并因此使用左连接来轻松实现。我想知道如何使用尽可能少的 proc SQL 步骤来实现预期。非常感谢。
解决方案
你在比较item
,900
什么时候应该比较type
。条件和可以使用其中的case
子句来完成。
例子
data mydata;
input Category $ Item type amount;
datalines;
A 1 100 11111
A 2 900 11111
A 3 123 11111
B 1 113 11111
B 2 900 11111
C 1 111 11111
C 2 900 11111
;
proc sql;
create table want as
select
*
, sum(case when type ne 900 then amount end) as without900
, sum(amount) as total
from
mydata
group by
category
;
quit;
推荐阅读
- firebase - 如何使用电子邮件(无密码)设置注册并在firebase中显示名称?
- python - OSX 内部麦克风在 Python 中拾取内部扬声器输出
- angular - 如何有效地在离子中加载大列表?
- regex - 将文本拆分为段落
- nuxt.js - 带有 Nuxt2 的 vue2-google-maps(config.externals 未定义)
- xcode - Xcode 本地提交失败并显示“多个工作副本未能提交文件”。错误
- javascript - 每次渲染 vue 组件时避免新的 axios 请求
- python - 我如何在正则表达式中做条件?
- c# - 将队列的一部分复制到另一个队列,甚至从队列复制到数组
- laravel - 如何在刀片中以多种语言将(创建)数据(CRUD)表格插入数据库并使用 LARAVEL MULTILANGUAGE - LOCALIZE 将其读出?