¿Cómo calcular el número de días laborables?Hola comunidad
Necesito vuestra ayuda y consejo una vez más. Como nuevo usuario, me cuesta aprender.
Tengo una tabla de datos con fecha de inicio y fecha de finalización. ¿Me gustaría calcular el número de días hábiles entre la fecha de inicio y la fecha de finalización? ¿Cuál es la mejor manera de hacer eso en JMP? Mi idea es agregar una columna y hacer una fórmula, por ejemplo, ¿diferencia de fechas? Pero no estoy seguro de cuál sería la mejor opción.
por favor vea el ejemplo adjunto

Gracias
Martín
Modelado estadístico avanzadoLa personalización en masaRe: ¿Cómo calcular el número de días laborables?Hola jerry
esto fue realmente útil. Hice mi propia lista y ahora mostraba lo que me gustaría.
Gracias
Martín
Re: ¿Cómo calcular el número de días laborables?Hola @martinej ,
Hace un tiempo escribí un complemento que calcula la cantidad de días hábiles entre dos columnas de fecha. Los días festivos y cualquier otro día específico que desee excluir se solucionan manteniendo un archivo Holiday List.jmp almacenado en su directorio de complementos. Nota: este archivo podría ser cualquier documento (Excel, .txt, .csv, etc.) mantenido en cualquier ubicación a la que pueda acceder la máquina del usuario de JMP; sin embargo, esto requeriría un ajuste menor en el JSL subyacente para proporcionar la ubicación del archivo. De lo contrario, creo que aborda la necesidad solicitada tal como está. Siga las instrucciones para descargar, instalar y editar el archivo de lista de días festivos: Función DÍAS DE RED
Espero que esto ayude,
alemán
Re: ¿Cómo calcular el número de días laborables?Mi favorito es el viejo Carolina del Norte. vacaciones de beisbol .
Re: ¿Cómo calcular el número de días laborables?Para agregar un poco a @Craige_Hales 'arena @Jeff_Perkinson Pensamientos sobre los días festivos, etc., mencionaste pensamientos sobre la contabilidad de los "días festivos locales". Eso se vuelve realmente difícil a menos que se adopte alguna definición estándar de "local". Por ejemplo, Canadá tiene un feriado de "Acción de Gracias", al igual que Estados Unidos. Excepto que es un día diferente en el calendario de Canadá en comparación con el de Estados Unidos. Y ni siquiera hablemos a nivel de ciudad o estado en los EE. UU. Por ejemplo, en los estados de Maine y Massachusetts, el Día del Patriota es un día festivo que no se celebra en ningún otro lugar de Estados Unidos. Para hacerlo aún más complicado, algunas empresas cierran... otras permanecen abiertas. Bancos e instituciones financieras incluidos.
Re: ¿Cómo calcular el número de días laborables?Trabajar con codificación es nuevo para mí y parece que no consigo que funcione. sin embargo, jugué con algunas de las fórmulas estándar y encontré soluciones. que, sin embargo, utilizan días naturales y no sólo días laborables. Para este experimento es suficiente siempre que sea el mismo para comparar.
Re: ¿Cómo calcular el número de días laborables?La solución sencilla sería ampliar la expresión de prueba.
// define an expression that answers the question
holidays = associativearray({1jan2020,25dec2020});
includeThisDate = Expr(
(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/)
&
!(holidays<<CONTAINS></CONTAINS>Año Nuevo y Navidad caen entre semana en 2020, por lo que 260 en lugar de 262. Necesitará actualizar la matriz asociativa en algún momento en el futuro y es posible que también necesite datos históricos. Algunos días festivos no caen en el mismo día todos los años. Qué problema tan feo, que lleva a...
Una solución complicada podría usar algo como https://www.abstractapi.com/holidays-api
(Crédito a @Jeff_Perkinson para Cambiar una columna de fecha y hora para obtener solo la fecha.)
Re: ¿Cómo calcular el número de días laborables?Sí, los días laborables son todos los días laborables (de lunes a viernes). Sería mejor si también pudiera adaptarme a los días festivos locales.
¿alguna sugerencia?
Re: ¿Cómo calcular el número de días laborables?Otras preguntas también: las fechas JMP siempre incluyen una hora, a menudo establecida en cero segundos después de la medianoche. Pero si el rango es desde el mediodía del lunes hasta el mediodía del lunes 7 días después, ¿cómo quieres contar los dos medios lunes? O incluso si es medianoche a principios del lunes, ¿deberían contarse ambos?
Contar los días puede no ser una mala elección si sus rangos son pequeños y no demasiados (a continuación se muestra un código mal probado):
// define an expression that answers the question
includeThisDate = Expr(
2/*monday*/<= Day Of Week( date ) <= 6/*friday*/
);
// brute force counting:
countSelectedDaysInRange = Function( {firstDate, lastDate, testexpr},
{date, count},
If( lastDate < firstDate,
Throw( "dates reversed" )
);
count = 0;
For( date = firstDate, date <= lastDate, date += In Days( 1 ),
count += (testexpr != 0)
);
count;
);
Show( 262 == countSelectedDaysInRange( 1jan2020, 31dec2020, Name Expr( includeThisDate ) ) );
Show( 104 == countSelectedDaysInRange( 1jan2020, 31dec2020, Expr( !(2/*monday*/<= Day Of Week( date ) <= 6/*friday*/) ) ) );
Show( 366 == countSelectedDaysInRange( 1jan2020, 31dec2020, 1 ) );// 2020 is leap year
Show( 0 == countSelectedDaysInRange( 1jan2020, 31dec2020, 0 ) );// no days counted262 == countSelectedDaysInRange (01 de enero de 2020, 31 de diciembre de 2020, Expr de nombre (incluye esta fecha)) = 1;
104 == countSelectedDaysInRange(01 de enero de 2020, 31 de diciembre de 2020, Expr(!(2 <= Día de la semana (fecha) <= 6))) = 1;
366 == countSelectedDaysInRange(01 de enero de 2020, 31 de diciembre de 2020, 1) = 1;
0 == countSelectedDaysInRange(01 de enero de 2020, 31 de diciembre de 2020, 0) = 1;
El código anterior incluye el último día (<= última fecha en lugar de <última fecha). Comienza en el primer valor de fecha y hora y se incrementa en 24 horas y agrega uno al recuento si ese valor de fecha y hora satisface la expresión.
Por experiencia dolorosa, sé que trabajar con fechas y horas es difícil de acertar.
Utilice las funciones integradas tanto como sea posible.
Comenta el código para quien lo mantenga a continuación.
¡Prueba tu código cuidadosamente!
Además, si sólo necesita una aproximación burda,
(1 de enero de 2021-1 de enero de 2020)/días(1)*5/7 == 261.428571428571
que está cerca del recuento de 262.
editar: diferencia de fecha(1 de enero de 2020, 1 de enero de 2021, "día")*5/7 podría parecer más simple para la respuesta cruda
Re: ¿Cómo calcular el número de días laborables?Lo primero que hay que hacer es definir "jornada laboral". ¿Es todos los días laborables (lunes a viernes)? ¿Qué pasa con los días festivos bancarios/gubernamentales? ¿Vacaciones religiosas?