gpt4 book ai didi

sql - Group By Statement proc sql

转载 作者:行者123 更新时间:2023-12-04 22:40:59 27 4
gpt4 key购买 nike

考虑以下测试数据集:

data test;
input Drug $ Quantity State $ Year;
datalines;
A 10 NY 2013
A 20 NY 2014
B 110 NY 2013
B 210 NY 2014
A 50 OH 2013
A 60 OH 2014
B 150 OH 2013
B 260 OH 2014
A 22 NY 2014
B 100 OH 2013
;
RUN;

以下代码汇总了 2013 年按药物和州划分的药物 A 和 B 数量:
    proc sql;
create table testnew as
select *, sum(Quantity) as total from test
where Year=2013
group by Drug,State;
quit;

我有兴趣获得每种药物在每个州的总量中的比例。因此,例如在俄亥俄州,2013 年共有 300 个单位的药物 A 和 B。A 的比例为 50/300,B 的比例为 250/300。

下面的代码按州获取总药物:
  proc sql;
create table testnew1 as
select *, sum(Quantity) as total1 from test
where Year=2013
group by State;
quit;

我在想我可以合并 test test1 和分 total 来自 total1 得到比例。但是有没有更简单的方法来做到这一点?

最佳答案

首先,在 SQL 中汇总变量时,您应该避免在最终表中包含除“分组依据”变量和汇总变量以外的输入变量。
这是为了防止行重复。

即使药物/状态组合只有 4 行,您编写的第一个 SQL 也会输出 5 行。
因此,与其选择 *,不如指定分组变量并在“group by”子句中使用数字符号:

proc sql;
create table testnew as
select State,
Drug,
sum(Quantity) as total
from test
where Year=2013
group by 1, 2;
quit;

要获得每种药物相对于 State 总数的比例,您可以使用子查询,在其中按 State 计算总数,而不是直接在外部查询中使用它:
proc sql;
create table testnew1 as
select State,
Drug,
sum(Quantity) as total,
total_by_state,
(calculated total) / total_by_state as proportion format=percent9.2
from (select *,
sum(Quantity) as total_by_state
from test
where Year=2013
group by State)
where Year=2013
group by 1, 2;
quit;

如果需要,您可以删除 where 子句并将 Year 变量包含在 group by 中,无论是在外部查询还是内部查询中。

关于sql - Group By Statement proc sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com