SAS SQL: объединить последовательные строки с пустой датой, если следующая строка отличается

Приватные трансляции должны оставаться вокруг (даже если они получены), чтобы впоследствии их можно было получить. Возможно, вам стоит попробовать простой способ вещания, используя:

sendBroadcast(i);

Прочитайте этот .

0
задан Tanya 11 March 2019 в 14:21
поделиться

2 ответа

Хммм. , , Это почти делает то, что вы хотите:

select distinct t.activity_name, t.status_change_dttm
from t1 t;

Однако, это вернет NULL значения, даже если существуют не NULL значения, например, для 1. Чтобы предотвратить это:

select distinct t.activity_name, t.status_change_dttm
from t1 t
where t.activity_name is not null or
      not exists (select 1
                  from t1 t2
                  where t2.activity_name = t.activity_name and
                        t2.status_change_dttm is not null
                 );

Примечание. В этом случае select distinct может не понадобиться.

0
ответ дан Gordon Linoff 11 March 2019 в 14:21
поделиться

Решение шага данных SAS может быть следующим:

/* set up data */
data have;
   infile datalines truncover;

   input activity_name      :         8.
         status_change_dttm : datetime20.
   ;

   format status_change_dttm datetime20.;

   datalines;
1 
1 
1 18FEB2019:19:16:13
2 
3 
3 
3 
4 
5 03FEB2019:14:38:52
5 04FEB2019:18:30:52
5 14FEB2019:12:00:12
15 
15 04FEB2019:18:30:52
15 14FEB2019:12:00:12
;


/* process and output */
data want;
   null_count  = 0;
   group_count = 0;

   /* count number of records and nulls for this activity_name group */
   do until(last.activity_name);
      set have;
      by activity_name;

      group_count + 1;

      if missing(status_change_dttm) then
         null_count + 1;
   end;

   /* output data for the same activity_name group */
   do until(last.activity_name);
      set have;
      by activity_name;

      if null_count = 0 then
         output;
      else
         if null_count eq group_count then
         do;
            output;
            /* prevent any more null records being output */
            null_count + 1;
         end;
         else
            if null_count lt group_count and not missing(status_change_dttm) then
               output;
   end;
run;
0
ответ дан Amir 11 March 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: