Tengo un script JSL que periódicamente extrae datos de una base de datos de Access.
La base de datos de acceso contiene una columna de fecha "Fecha disponible" con un dd-Mon-YYYY (por ejemplo, 12-ABR-2018) formato. Lo que estoy tratando de hacer es crear una nueva columna "Fecha objetivo" en JMP que agregue x número de días a la fecha en "Fecha disponible" para cada fila.
Por ejemplo: En la imagen a continuación, la fecha objetivo es igual a la fecha disponible + 4 días. Estoy intentando calcular automáticamente la fecha objetivo en función de la fecha disponible. El número de días se basa en la columna "Tiempo (meses)".

Esto es lo que he intentado hasta ahora, que obviamente no funciona. Creo que necesito convertir la columna "Fecha disponible" a un tipo de datos numérico, luego agregar el número de días y convertir de nuevo a Carácter.
dt << New Column("Target Date", "Character", "Nominal");
dt << For Each Row(
IF (:"Time (Months)" <= 3, :"Target Date" = :"Available Date" + 4 ),
IF (:"Time (Months)" > 3, :"Target Date" = :"Available Date" + 7 )
);La tabla adjunta agrega 4 días a su columna de fecha disponible para obtener la fecha objetivo.Pasos: cambie el tipo de datos para la fecha disponible a numérico / continuo con el formato de fecha apropiado; luego use la función Incremento de fecha para agregar 4 días a la fecha disponible, finalmente cambie el formato de la columna de fecha objetivo resultante para que coincida con lo que usó en la columna de fecha disponible.
Una nota adicional: en su ejemplo, parece que agregó una semana (7 días en lugar de 4).
A menos que haya una razón real para mantener los valores de Fecha objetivo como una columna de caracteres, le sugiero que la convierta en una columna de Fecha JMP.
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", format( "ddmonyyyy") );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
:Target Date =
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
)
);

Es muy fácil convertir la salida anterior en carácter mediante la siguiente modificación
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
for each row(
if( :"Time (Months)"n <= 3,
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
"ddmonyyyy"
),
:Target Date = format(
Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 ),
"ddmonyyyy"
)
)
);

Si el formato de salida debe ser exactamente como el formato de los datos de entrada, lo siguiente logrará eso
Names Default To Here( 1 );
dt = Current Data Table();
dt << new column( "Target Date", character );
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP",
"OCT", "NOV", "DEC"};
for each row(
if( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
:Target Date = Substr( "0", Length( Char( Day( temp ) ) ) ) ||
Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );
);

Si quisiera usar una fórmula en lugar de Para cada fila, esto sería para la fórmula del resultado anterior
monthList = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
If( :"Time (Months)"n <= 3,
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 4 ),
temp = Informat( :Available Date, "ddmonyyyy" ) + In Days( 7 )
);
Substr( "0", Length( Char( Day( temp ) ) ) ) || Char( Day( temp ) ) || "-" || monthList[Month( temp )] || "-" ||
Char( Year( temp ) );