Хотел потянуть текущий месяц -2 месяца - PullRequest
0 голосов
/ 14 июня 2019

Я хотел вытащить current_month - months в SAS, я пробовал через функцию intnx. Но это не работает для меня.

DATA
 input_file
 ;
 input
  @1 DHQ_ID             5.
  @7 AS_OF_DT           DATE9.
  @22 CUST_THIS_MONTH_SPEND  7.5
  ;
FORMAT    AS_OF_DT       DATE9.
   ;
DATALINES;
10970 01OCT2014 0
10970 01NOV2014 0
10970 01JAN2015 0
10970 01FEB2015 0
10970 01MAR2015 0
10970 01APR2015 20
10970 01MAY2015 800
;
RUN;

%LET date = "01FEB2015"d;

proc sql;
    create table master_zero as select 
        dhq_id, 
        sum(case  when cust_this_month_spend <= 0 OR 
                  (INTNX('month',&date.,-2)) IS NULL
       then 1 else 0 end)as cnt_zero 
    from input_file
        where 
        as_of_dt between intnx('month',&date.,-2) and &date. 
        group by dhq_id 
        order by dhq_id;
quit;


data master_zero2 (drop = cnt_zero);
    set master_zero (where = (cnt_zero = 3));
    format dt date9.;
    dt = &date.;
run;

Результат:

DHQ_ID  CNT_ZERO dt 
10970   2        01DEC2014

1 Ответ

0 голосов
/ 16 июня 2019

Пример кода, который вы показываете, не читает CUST_THIS_MONTH_SPEND правильно, вы можете захотеть

@17 CUST_THIS_MONTH_SPEND  best7.

вместо

@22 CUST_THIS_MONTH_SPEND  7.5

Вы можете сосчитать количество месяцев для каждой группы,с 0 расходами - или незаписанными расходами, выполненными в течение 3 месяцев до целевого месяца, следующим образом:

  • ограничьте строки теми, которые в течение 3 месяцев до
  • , суммируют логическую оценку для подсчетаизвестные нули
  • подсчитывают несуществующие месяцы, вычитая количество существующих строк (count(*)) из ожидаемых строк (3)

Пример:

DATA have;
 format groupid 8. as_of_dt date9.;
 input groupid as_of_dt DATE9. spending; DATALINES;
10970 01OCT2014 0
10970 01NOV2014 0
10970 01JAN2015 0
10970 01FEB2015 0
10970 01MAR2015 0
10970 01APR2015 20
10970 01MAY2015 800
;
RUN;

%LET month = "01FEB2015"d;

proc sql;
  create table want as
  select 
    groupid,
    sum(spending = 0) + 3 - count(*) as zeromissingCount,
    &date as ending_month format=monyy7.
  from have
  where intck('month', &date, as_of_dt) between -2 and 0
  group by groupid
  ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...