Ho uno script JSL che estrae periodicamente i dati da un database di Access.
Il database di accesso contiene una colonna della data "Data disponibile" con un gg-Lun-AAAA (ad es. 12-APR-2018). Quello che sto cercando di fare è creare una nuova colonna "Data di destinazione" in JMP che aggiunge il numero x di giorni alla data in "Data disponibile" per ogni riga.
Per esempio: Nell'immagine seguente, la data di destinazione è uguale a Data disponibile + 4 giorni. Sto cercando di calcolare automaticamente la data di destinazione in base alla data disponibile. Il numero di giorni si basa sulla colonna "Tempo (mesi)".

Questo è quello che ho provato finora, che ovviamente non funziona. Penso di dover convertire la colonna "Data disponibile" in un tipo di dati numerico, quindi aggiungere il numero di giorni e riconvertirlo in Carattere?
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 tabella allegata aggiunge 4 giorni alla colonna della data disponibile per ottenere la data di destinazione.Passaggi: modificare il tipo di dati per la data disponibile in numerico / continuo con una formattazione della data appropriata; quindi utilizzare la funzione Incremento data per aggiungere 4 giorni alla data disponibile, infine modificare la formattazione per la colonna della data di destinazione risultante in modo che corrisponda a ciò che è stato utilizzato nella colonna della data disponibile.
Una nota aggiuntiva: nel tuo esempio, sembra che tu abbia aggiunto una settimana (7 giorni anziché 4).
A meno che non ci sia un motivo reale per mantenere i valori della data di destinazione come una colonna di caratteri, ti suggerisco di convertirlo in una colonna di data di 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 )
)
);

È molto facile convertire l'output di cui sopra in carattere con la modifica sottostante
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"
)
)
);

Se il formato di output deve essere esattamente come il formato dei dati di input, quanto segue lo otterrà
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 ) );
);

Se si desidera utilizzare una formula anziché per ogni riga, questa sarebbe per la formula per l'output di cui sopra
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 ) );