2016-03-14 2 views
0

Я изо всех сил пытаюсь выяснить в SAS, как лучше всего иметь дело со сценарием, когда в образце данных «alex» имеет два порядка в 2015 году, и поэтому я хотел бы, чтобы появился новый столбец с его статус = «активный»Вычислить новое поле из нескольких наблюдений sas

любые полезные подсказки, которые помогут мне на правильном пути? благодаря

ID  first_order  Order 
alex  01/01/2013  23/01/2015 
alex  01/01/2013  23/01/2015 
alex  01/01/2013  03/04/2013 
+0

Вы хотите, чтобы столбец 'status' отображался активным только для дат 2015 года? –

+0

Какова сложность, помимо назначения переменной? – Reeza

+0

вы можете использовать INTNX, DATDIF, ... –

ответ

1

В этом примере, давайте предположим, что Алекс помещен один заказ в 2013 году и еще один заказ в 2015 году Боб помещен только один заказ в 2013 году Давайте создадим некоторые данные:

data have; 
    format id $4. first_order Order date9.; 
    id = 'Alex'; first_order = '01JAN2013'd; Order = '23JAN2015'd; output; 
    id = 'Alex'; first_order = '01JAN2013'd; Order = '03APR2013'd; output; 
    id = 'Bob'; first_order = '01JAN2013'd; Order = '01JAN2013'd; output; 
run; 

макросоци- ниже может использоваться для получения статуса клиента в любой конкретный год.

%macro Active(year=); 

proc sql; 
    create table CustomerStatus as 
    select id, 
      case when max(year(Order)) = &year then 'Active' 
      else 'Inactive' end as Status_in_&year length=8 
    from have 
    group by id 
    order by id; 

    create table want as 
    select have.id, have.first_order, have.Order, CustomerStatus.Status_in_&year 
    from have inner join CustomerStatus on have.id = CustomerStatus.id 
    order by CustomerStatus.id; 
quit; 

%mend Active; 

%Active(year=2015); 

В таблице CustomerStatus мы получаем год последнего заказа для всех клиентов. Если это соответствует году заказа, статус клиента активен. Наконец, статус объединяется с таблицей Orders.