Рассчитать описательную статистику по строке, используя данные столбца из другой таблицы - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть две таблицы, как показано ниже

Таблица 1

ID    day start end
21005 3   4004  4012
21005 3   4031  4055
21005 4   4671  4679
21005 4   4689  4792
21005 4   4803  4828
21005 4   4837  4860
21005 4   5301  5424
21005 6   8068  8084
21005 6   8114  8148
21005 7   9239  9256
21005 7   9311  9326
21005 7   9497  9515
21005 7   9535  9574
21005 7   9615  9627
21005 7   9679  9694
21006 3   3738  3752
21006 5   7065  7077
21006 6   8374  8402
21007 1   732   742
21007 1   773   785
21007 1   831   853
21007 1   865   876
21007 1   880   894
...................

Таблица 2

ID    day time concentration
21005 1   1    562
...................
21005 2   1    90
...................
21005 3   1    2258
...................
21005 3   4004 1981
21005 3   4005 3077
21005 3   4006 1371
21005 3   4007 1990
21005 3   4008 1869
21005 3   4009 934
21005 3   4010 413
21005 3   4011 2506
21005 3   4012 2948
...................
21005 3   4031 2266
21005 3   4032 4711
21005 3   4033 0
21005 3   4034 12
21005 3   4035 1017
21005 3   4036 1215
21005 3   4037 990
21005 3   4038 3083
21005 3   4039 1391
21005 3   4040 3762
21005 3   4041 1568
21005 3   4042 2907
21005 3   4043 2295
21005 3   4044 939
21005 3   4045 884
21005 3   4046 2067
21005 3   4047 1473
21005 3   4048 1070
21005 3   4049 1403
21005 3   4050 1464
21005 3   4051 1049
21005 3   4052 1513
21005 3   4053 333
21005 3   4054 104
21005 3   4055 1133
...................

, и я хотел бы создать сводную таблицу, используя таблицу 1 и данные таблицы 2

сводная таблица

ID    day start end  min max  mean    median sum
21005 3   4004  4012 413 3077 1898.78 1981   17089
21005 3   4031  4055 0   4711 1545.96 1391   38649
................................................

в основном сводная таблица = рассчитать минимальную, максимальную среднюю медиану и сумму концентрации, используя время начала и окончания в таблице 1, по идентификатору и дню. Я понятия не имею, как это сделать ...

что я пробовал:

data test;
    merge table2 table1(keep=id day start end);
    by ID day;
    if start<=time <=end;
run;

затем pro c сводка по ID и дню

, но проблема в том, для одного и того же дня, есть несколько начала и конца

1 Ответ

0 голосов
/ 13 февраля 2020

Рассмотрим запрос SQL join с использованием фильтра диапазона between при времени :

proc sql;
   create table summary_table as
   select t1.ID, 
          t1.day,
          min(concentration) as min,
          max(concentration) as max,
          mean(concentration) as mean,
          median(concentration) as median,
          sum(concentration) as sum

   from table1 t1
   inner join table2 t2
       on t1.ID = t2.ID and t1.day = t2.day

   where t2.time between t1.start and t2.end
   group by t1.ID, 
            t1.day;
quit;
...