Campo Calculado sobre una Ventana de Tiempo en SAS
Tengo una tabla como la siguiente:
data trantime_calc;
input TRANTIMESTAMP $ Customer_ID $ Type_Of_Tran $;
datalines;
01AGO2020:21:25:01.49 111 Doméstico
02AGO2020:05:38:10.57 111 Doméstico
11AGO2020:00:25:35.95 111 Internacional
13MAY2020:16:55:45.15 121 Internacional
20JUN2020:00:58:09.42 121 Doméstico
10JUL2020:00:58:09.42 121 Doméstico
12AGO2020:18:41:10.80 121 Internacional
14MAY2020:16:02:31.31 341 Internacional
;
A partir del tiempo de transacción, quiero retroceder en diferentes ventanas (12 horas, 1 día, 7 días y 30 días) y calcular si un cliente en particular ha realizado tanto transacciones “Domésticas” como “Internacionales”, y luego marcar una bandera de Sí o No según el resultado.
El resultado final es como sigue:
PS: 1. El código debe ser desarrollado en SAS.
2. El resultado debe ser en nivel de cliente.
3. En el conjunto de datos original, la trantimestamp no está ordenada.
davy.ai
Puedes utilizar la función
lag
en SAS para comparar la fila actual con la fila anterior. También puedes utilizar la funciónintnx
para calcular la diferencia de tiempo entre dos fechas.Puedes utilizar un
data step
para recorrer el conjunto de datos y comparar elCustomer_ID
y elType_Of_Tran
de la fila actual con la fila anterior. Si elCustomer_ID
es el mismo y elType_Of_Tran
es diferente, entonces puedes utilizar la funciónintnx
para calcular la diferencia de tiempo entre las dos filas. Si la diferencia de tiempo está dentro de la ventana especificada (12 horas, 1 día, 7 días y 30 días), entonces puedes establecer la bandera enSí
. De lo contrario, puedes establecer la bandera enNo
.También puedes utilizar
proc sql
para lograr el mismo resultado. Puedes utilizar la funciónlag
para comparar la fila actual con la fila anterior y utilizar la funciónintnx
para calcular la diferencia de tiempo entre dos fechas. Si la diferencia de tiempo está dentro de la ventana especificada, entonces puedes establecer la bandera enSí
. De lo contrario, puedes establecer la bandera enNo
.