Publicado el :
Procesamiento de Datos CREATION_INTERNE

Alineación de Intervalos y Funciones de Fecha

Este código también está disponible en: Deutsch English Français
En espera de validación
Este script SAS© explora en detalle las funciones `INTNX` e `INTCK`, esenciales para la manipulación y el cálculo de fechas e intervalos. Presenta cómo `INTNX` permite avanzar una fecha un cierto intervalo utilizando diversas opciones de alineación (inicio, medio, fin, mismo día del mes/año). El script también aborda cómo `INTNX` maneja los avances de fecha que podrían resultar en fechas 'ilegales' (ej: el 29 de febrero en un año no bisiesto). La función `INTCK` se ilustra para contar el número de intervalos (aquí, semanas) entre dos fechas, mostrando las diferencias entre los métodos de conteo 'continuo' y 'discreto'.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos utilizados en este script se generan internamente a través de pasos DATA. El script crea conjuntos de datos (`ExamSchedule`, `check`) o utiliza `DATA _NULL_` para demostraciones directas, basándose en fechas literales y bucles para simular series de tiempo o escenarios específicos.

1 Bloque de código
DATA STEP Data
Explicación :
Este bloque DATA STEP crea un conjunto de datos llamado `ExamSchedule`. Genera una serie de fechas (`visdt`) del 1 al 10 de junio de 2007. Para cada fecha, la función `INTNX` se utiliza para calcular el mes siguiente con diferentes opciones de alineación: por defecto (inicio del mes), 'beginning' (inicio del mes), 'middle' (medio del mes), 'end' (fin del mes) y 'same' (mismo día del mes). Las fechas resultantes se almacenan en nuevas variables (`next_d`, `next_b`, `next_m`, `next_e`, `next_s`) y se formatean para una mejor legibilidad.
¡Copiado!
1title1 '3.4.3 Alignment Options';
2 
3DATA ExamSchedule;
4 DO visdt = '01jun2007'd to '10jun2007'd;
5 next_d = intnx('month',visdt,1);
6 next_b = intnx('month',visdt,1,'beginning');
7 next_m = intnx('month',visdt,1,'middle');
8 next_e = intnx('month',visdt,1,'end');
9 next_s = intnx('month',visdt,1,'same');
10 OUTPUT;
11 END;
12 FORMAT visdt next: date7.;
13 RUN;
2 Bloque de código
PROC PRINT
Explicación :
Este procedimiento `PROC PRINT` muestra el contenido del conjunto de datos `ExamSchedule` creado anteriormente. Esto permite visualizar y comparar los resultados de las diferentes opciones de alineación de la función `INTNX` aplicadas a las fechas.
¡Copiado!
1PROC PRINT DATA=examschedule;
2 RUN;
3 Bloque de código
DATA STEP
Explicación :
Este bloque `DATA _NULL_` se utiliza para una demostración directa sin crear un conjunto de datos permanente. Ilustra el efecto de la opción 'middle' ('m') de la función `INTNX` en diferentes fechas. Muestra cómo `INTNX` calcula la mitad del mes siguiente, teniendo en cuenta los años bisiestos o el número variable de días por mes, y muestra los resultados en el log de SAS.
¡Copiado!
1DATA _null_;
2 mfeb= intnx('month','01jan2009'd, 1, 'm');
3 leap= intnx('month','01jan2008'd, 1, 'm');
4 mapr= intnx('month','01jan2008'd, 3, 'm');
5 mmay= intnx('month','01jan2008'd, 4, 'm');
6 put mfeb= leap= mapr= mmay=;
7 FORMAT mfeb leap mapr mmay date9.;
8 RUN;
4 Bloque de código
DATA STEP
Explicación :
Este segundo bloque `DATA _NULL_` demuestra un caso particular de `INTNX`: el avance hacia fechas 'ilegales'. Calcula el año siguiente a partir del 29 de febrero de 2008 (año bisiesto) y el mes siguiente a partir del 31 de mayo de 2008 (mes de 31 días), utilizando la opción 'same' ('s'). Los resultados, que muestran cómo SAS maneja estos avances (por ejemplo, el 28 de febrero para el año siguiente si no es bisiesto), se muestran en el log.
¡Copiado!
1DATA _null_;
2 leap = intnx('year', '29feb2008'd, 1, 's');
3 short= intnx('month','31may2008'd, 1, 's');
4 put leap= short=;
5 FORMAT leap short date9.;
6 RUN;
5 Bloque de código
DATA STEP Data
Explicación :
Este bloque DATA STEP crea un conjunto de datos llamado `check`. Inicializa una fecha de inicio fija (`start`) el 14 de septiembre de 2011. Luego, itera a través de las fechas, desde la fecha de inicio hasta la 'misma fecha' del mes siguiente, calculada con `INTNX`. En cada iteración, la función `INTCK` se utiliza para contar el número de 'weeks' (semanas) entre la fecha de inicio y la fecha de fin actual, utilizando las opciones por defecto, 'continuous' ('c') y 'discrete' ('d'). El conjunto de datos `check` registra estos cálculos.
¡Copiado!
1* Alignment for INTCK;
2DATA check;
3 start = '14sep2011'd; * the 14th was a Wednesday;
4 DO END = start to intnx('month',start,1,'s');
5 weeks = intck('weeks',start,END);
6 weeksc= intck('weeks',start,END,'c');
7 weeksd= intck('weeks',start,END,'d');
8 OUTPUT check;
9 END;
10FORMAT start END date9.;
11RUN;
6 Bloque de código
PROC PRINT
Explicación :
Este procedimiento `PROC PRINT` final muestra el contenido del conjunto de datos `check`. Permite examinar cómo las diferentes opciones de conteo ('por defecto', 'continuous', 'discrete') de la función `INTCK` afectan el cálculo del número de semanas entre dos fechas dadas.
¡Copiado!
1PROC PRINT DATA=check;
2RUN;
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.