Proc SQL Version = 9.4. Нет функций для использования Windows.
Идентификатор клиента, период времени (месяц), сумма и соответствующий класс.
client_id data_period amount class
1 200801 30000 2
2 200801 17000 1
3 200801 9000 1
1 200802 30000 2
2 200802 55555 2
3 200802 11000 2
Пороговая сумма = 20 000.
сумма> 20к дает класс = 2 , количество <= 20к составляет <strong>класс = 1
client_id = 1, количество и класс одинаковы для 200801 и 200802.
client_id = 2, сумма увеличивается с 17k до 55,5k, изменение класса корректно, с 1 до 2.
client_id = 3, сумма изменилась в том же классе 1 (<20K), но класс изменился неправильно. </p>
Желаемый результат:
client_id oldDate newDate AmtOld AmtNew ClassOld ClassNew Good Bad
2 200801 200802 17000 55555 1 2 1 0
3 200801 200802 9000 11000 1 1 0 1
Я пытался применить самосоединение, чтобы получить все различия между периодами данных, но в выводе слишком много строк. Данные ниже не из приведенного выше примера, реальные цифры.
client_id oldDate newDate AmtOld AmtNew ClassOld ClassNew
A001687463 200808 200802 -5613 1690386 I03 I04
A001687463 200807 200802 -5613 1690386 I03 I04
A001687463 200806 200802 -5613 1690386 I03 I04
A001687463 200805 200802 -5613 1690386 I03 I04
PROC SQL;
CREATE TABLE WORK.'Q'n AS
SELECT distinct
t1.client_id, t1.data_period as oldDate, t2.data_period as newDate, t1.amount as expAmtOld, t2.amount as expAmtNew, t1.class as classOld, t2.class as classNew
FROM WORK.'E'n t1, WORK.'E'n t2
where
t1.client_id = t2.client_id and
t1.amount <> t2.amount
order by t1.client_id;