Извлечение минимального значения после поднабора в PROC SQL - PullRequest
0 голосов
/ 16 мая 2018

У меня есть образец набора данных с именем Полеты . Я хочу извлечь из него источник Название аэропорта с наименьшим количеством задержек вылета

Примеры данных о рейсах: -

Date     (Sched_dep_time) (dep_time)(flight)(origin)  (Dep_delay_min)
01-01-2013  5:15             5:17   1545    EWR       -2
01-01-2013  5:29             5:33   1714    LGA       -4
01-01-2013  5:40             5:42   1141    JFK       -2
01-01-2013  21:10           21:04   725     JFK        6
01-01-2013  20:30           21:04   461     LGA      -74
01-01-2013  21:06           21:05   1696    EWR        1
01-01-2013  20:55           21:10   507     EWR      -55
01-01-2013  20:25           21:14   5708    LGA      -89
01-01-2013  21:10           21:15   79      JFK       -5
01-01-2013  21:24           21:16   301     LGA        8
01-01-2013  6:00             5:58   49      JFK        42
01-01-2013  6:00             5:58   71      JFK        42
01-01-2013  6:00             5:58   194     JFK        42

Код, который я пытался: -

Proc sql;                                                                                                                               

Create table least_delay as                                                                                                         

Select origin,min(number_of_delays)as min_delay from                                                                                                

(Select Origin,Count(Departure_delay_minutes) as Number_of_delays from 
Flight                                                       
Where (Departure_delay_minutes>0))                                                                                                      

Group by Origin                                                                                                                         
;                                                                                                                                       
Quit;    

Вывод , который я получаю, следующий: -

    Origin  min_delay
1   NLI      1135504
2   JFK      1135504
3   LGA      1135504

Показывает одинаковый результат для всех источников!

Кто-нибудь может мне помочь в этом?

1 Ответ

0 голосов
/ 16 мая 2018

Конкретная проблема в вашем коде заключается в том, что вам нужно добавить предложение group by Origin в подзапрос.Однако все, что нужно сделать, это вернуть количество задержек для каждого источника, а не источник с наименьшей задержкой.Небольшое изменение в коде, добавление предложения having, исправляет это.

data flight;
input Date :ddmmyy10. (Sched_dep_time dep_time) (:time.) flight origin $ Dep_delay_min;
format date date9. Sched_dep_time dep_time time. ;
datalines;
01-01-2013  5:15             5:17   1545    EWR       -2
01-01-2013  5:29             5:33   1714    LGA       -4
01-01-2013  5:40             5:42   1141    JFK       -2
01-01-2013  21:10           21:04   725     JFK        6
01-01-2013  20:30           21:04   461     LGA      -74
01-01-2013  21:06           21:05   1696    EWR        1
01-01-2013  20:55           21:10   507     EWR      -55
01-01-2013  20:25           21:14   5708    LGA      -89
01-01-2013  21:10           21:15   79      JFK       -5
01-01-2013  21:24           21:16   301     LGA        8
01-01-2013  6:00             5:58   49      JFK        42
01-01-2013  6:00             5:58   71      JFK        42
01-01-2013  6:00             5:58   194     JFK        42
;
run;

proc sql;
create table least_delay
as select *
from (
  select
    origin,
    count(0) as num_delays
  from
    flight
  where
    dep_delay_min>0
  group by
    origin
    )
having num_delays = min(num_delays);
quit;
...