Publicado el :

Cálculos de fechas y detección de pagos atrasados

Este código también está disponible en: Deutsch English Français
En espera de validación
El script consta de tres bloques principales. El primer bloque calcula la duración (días, días hábiles, semanas, meses) entre la fecha actual y una fecha de vacaciones predefinida, almacenando los resultados en una tabla CAS. El segundo bloque genera información ficticia sobre los pagos, incluyendo un identificador de cliente, una fecha de vencimiento y una fecha de recepción del pago, luego los guarda en otra tabla CAS. El tercer bloque utiliza PROC PRINT para mostrar los registros de los clientes cuyos pagos se recibieron más de 10 días hábiles después de la fecha de vencimiento.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos procesados y generados por este script se crean internamente. La primera tabla se construye a partir de funciones SAS internas (TODAY()) y fechas literales. La segunda tabla se genera aleatoriamente usando la función RAND(). No se utilizan datos externos ni de la biblioteca SASHELP como fuente primaria.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque DATA STEP inicializa una sesión CAS y crea la tabla 'casuser.tidTillSemestern'. Calcula la diferencia entre la fecha actual (IDAG) y una fecha de inicio de semestre (STARTSEM) utilizando la función INTCK. Los cálculos se realizan en días (DAGARTILLSEM), días hábiles (VECKODAGARTILLSEM), semanas (VECKORTILLSEM) y meses (MANADERTILLSEM), con la opción 'c' para un recuento continuo de semanas y meses. Las fechas se formatean en DDMMAAAA.
¡Copiado!
1cas;
2 
3DATA casuser.tidTillSemestern;
4 idag = today();
5 startSem = '15jun2023'd;
6 dagarTillSem = intck('day', idag, startSem);
7 veckodagarTillSem = intck('weekday', idag, startSem);
8 veckorTillSem = intck('week', idag, startSem, 'c');
9 manaderTillSem = intck('month', idag, startSem, 'c');
10 FORMAT idag startSem yymmdd10.;
11RUN;
2 Bloque de código
DATA STEP Data
Explicación :
Este bloque DATA STEP crea la tabla 'casuser.betalningsInformation' generando 20 registros de datos ficticios. Para cada 'kundID' (identificador de cliente), asigna una 'forfallodatum' (fecha de vencimiento) aleatoria en marzo de 2023 y una 'betalningInkommen' (fecha de recepción del pago) que es la fecha de vencimiento más o menos un número aleatorio de días (entre -5 y 20). Las fechas también se formatean en DDMMAAAA.
¡Copiado!
1/*skapa data*/
2DATA casuser.betalningsInformation;
3 DO kundID = 1 to 20;
4 forfallodatum = rand('integer', '01mar2023'd, '31mar2023'd);
5 betalningInkommen = forfallodatum + rand('integer', -5, 20);
6 OUTPUT;
7 END;
8 FORMAT forfallodatum betalningInkommen yymmdd10.;
9RUN;
3 Bloque de código
PROC PRINT
Explicación :
Este bloque utiliza PROC PRINT para mostrar una selección de registros de la tabla 'casuser.betalningsInformation'. La cláusula WHERE filtra los registros para incluir solo a los clientes cuya diferencia entre la fecha de vencimiento y la fecha de recepción del pago, calculada en días hábiles ('weekday') por la función INTCK, es superior a 10. Esto permite identificar a los clientes con un retraso significativo en el pago. La instrucción ID especifica que la variable KUNDID debe usarse como identificador en el informe.
¡Copiado!
1/*Kunder som är mer än 10 veckodagar sena med sin betalning*/
2PROC PRINT DATA=casuser.betalningsInformation;
3 id kundID;
4 where intck('weekday', forfallodatum, betalningInkommen) > 10;
5RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.