Я разработчик SAS.У меня есть sql, чтобы сделать группу для получения минимума и максимума из столбца с именем «CalculatedPower».Ниже приведена структура, которую я получил от оператора group by (lt_dt и lp_dt - это то, что я хочу. Я помещаю это здесь, но это не в моей реальной таблице, так как я не знаю, как этого добиться):
station datetime calculatedpower min_power max_power lt_dt lp_dt
ABBA 28AUG2018:0:0:0 100 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ABBA 31AUG2018:12:0:0 88 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ABBA 01SEP2018:1:0:0 1 1 100 01SEP2018:1:0:0 28AUG2018:0:0:0
ZZZZ 07SEP2018:0:0:0 900 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
ZZZZ 09SEP2018:0:0:0 1000 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
ZZZZ 21SEP2018:0:0:0 3000 900 3000 07SEP2018:0:0:0 21SEP2018:0:0:0
Как вы все можете видеть, я собираю их по станциям и использую функции Min и Max, чтобы получить min_power и max_power.На данный момент мне нужно также получить минимальное время datetime (в lt_dt) и максимальное время datetime (в lp_dt).Я буду ожидать, как показано ниже: ABBA lt_dt - 01SEP2018: 1: 0: 0, в то время как lp_dt - 28AUG2018: 0: 0: 0
Имеется в виду, что lp_dt (datetime основан на max_power), а lt_dt (datetime основан наминимальная мощность)
Моя группа по утверждению выглядит следующим образом:
proc sql;
select
station
,datetime
,calculatedpower
,min(calculatedpower) as lt_calculatedpower
,max(calculatedpower) as lp_calculatedpower
from sumall
group by
station
;
quit;
Есть ли способ настроить мой существующий оператор SQL для достижения желаемого времени и даты?Я попробовал дополнительный SQL-оператор, как показано ниже (но он обрабатывает данные 600 КБ навсегда, не уверен, работает ли он или нет, поскольку он все еще выполняется)
proc sql;
select *,
case when calculatedpower=lt_calculatedpower then datetime end as lt_datetime
from minmax;
quit;
С этим кодом, я предполагаю, будетошибка, если имеется несколько строк с одинаковой расчетной мощностью, но разным временем и датой, которые связаны с 1 станцией.