Рассмотрим следующий набор тестовых данных:Group By Заявление Proc SQL
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;
Следующий код ниже суммирует количество препаратов A и B от наркотиков и государства за 2013 год:
proc sql;
create table testnew as
select *, sum(Quantity) as total from test
where Year=2013
group by Drug,State;
quit;
Я заинтересован в том, чтобы получить долю каждого препарата в общем количестве для каждого штата. Так, например, в Огайо в 2013 году насчитывается в общей сложности 300 единиц наркотиков А и В. Доля А будет составлять 50/300, а доля В будет равна 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
, чтобы получить пропорции. Но есть ли более простой способ сделать это?
Я бы рекомендовал использовать оконную функцию, если у вас есть те, которые доступны. Например, синтаксис стиля Oracle будет «SUM (количество) OVER (PARTITION BY state) AS state_total'. –
@Mr.Функции окна Llama не поддерживаются в SAS Proc SQL – Reeza