2015-04-29 4 views
1

Рассмотрим следующие набор данных test:Суммируя значения, основанные на группировке

Drug Quantity State Year 
    A  
    B 
    C 
    .  .  .  . 

Как бы подвести итог количества каждого препарата, сгруппированных по штатам и год? Будет ли это быть что-то вроде:

data test; 
by Drug State Year; 
Total = sum(Quantity) 
run; 
+4

Нет, посмотрите вместо этого на proc. Возможно, вам захочется рассмотреть возможность бесплатного использования курса SAS Programming 1 на веб-сайте SAS. – Reeza

+1

Поиск учебника по SQL (если вы еще этого не знаете), а затем как использовать SQL в SAS. –

ответ

1

Вам нужно что-то вроде этого:

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; 


proc means data= test SUM MAXDEC=0; 
    class Drug State Year; 
    var Quantity; 
RUN; 
+0

Почему нет десятичных знаков ...? Я не думаю, что я когда-либо видел повод для использования 'maxdec' (не сказать, что его нет). –

+1

В этом случае причиной было много 0s. 'MAXDEC = номер определяет максимальное количество знаков после запятой для отображения статистики на распечатанном или отображаемом выходе. MAXDEC = не влияет на статистику, которая сохраняется в наборе выходных данных. «Согласно [документации] (http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/a000146729.htm # a003281436) – mucio

+1

Я знаком с опцией и тем, что она делает, но она кажется плохой идеей, когда вы не сохраняете ее в наборе данных, потому что цифры могут вводить в заблуждение. ИМО слишком много нулей лучше, чем слепое округление. –

1

Мусиу ответ хорош, но если вы после версии SAS 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; 

PROC SQL; 
    CREATE TABLE EGTASK.QUERY_FOR_TEST AS 
    SELECT t1.Drug, 
      t1.State, 
      t1.Year, 
      /* SUM_of_Quantity */ 
      (SUM(t1.Quantity)) AS SUM_of_Quantity 
     FROM WORK.TEST t1 
     GROUP BY t1.Drug, 
       t1.State, 
       t1.Year; 
QUIT; 

Результат:

Result

Смежные вопросы