Ich habe ein JSL-Skript, das regelmäßig Daten aus einer Access-Datenbank abruft.
Die Zugriffsdatenbank enthält eine Datumsspalte "Verfügbares Datum" mit einem TT-Mo-JJJJ (z. 12-APR-2018) Format. Ich versuche, in JMP eine neue Spalte "Zieldatum" zu erstellen, die dem Datum in "Verfügbares Datum" für jede Zeile x Tage hinzufügt.
Zum Beispiel: In der Abbildung unten entspricht das Zieldatum dem verfügbaren Datum + 4 Tagen. Ich versuche, das Zieldatum basierend auf dem verfügbaren Datum automatisch zu berechnen. Die Anzahl der Tage basiert auf der Spalte "Zeit (Monate)".

Dies ist, was ich bisher versucht habe, was offensichtlich nicht funktioniert. Ich denke, ich muss die Spalte "Verfügbares Datum" in einen numerischen Datentyp konvertieren, dann die Anzahl der Tage hinzufügen und wieder in Zeichen konvertieren.
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 )
);Die angehängte Tabelle fügt Ihrer verfügbaren Datumsspalte 4 Tage hinzu, um das Zieldatum zu erhalten.Schritte: Ändern Sie den Datentyp für das verfügbare Datum in numerisch / fortlaufend mit der entsprechenden Datumsformatierung. Verwenden Sie dann die Funktion "Datumsinkrement", um dem verfügbaren Datum 4 Tage hinzuzufügen, und ändern Sie schließlich die Formatierung für die resultierende Zieldatums-Spalte so, dass sie mit der in der Spalte "Verfügbares Datum" verwendeten übereinstimmt.
Ein zusätzlicher Hinweis: In Ihrem Beispiel haben Sie anscheinend eine Woche hinzugefügt (7 Tage statt 4).
Sofern es keinen wirklichen Grund gibt, die Zieldatumswerte als Zeichenspalte beizubehalten, empfehlen wir Ihnen, sie in eine JMP-Datumsspalte zu konvertieren.
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 ist sehr einfach, die obige Ausgabe durch die folgende Modifikation in Zeichen umzuwandeln
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"
)
)
);

Wenn das Ausgabeformat genau dem Eingabedatenformat entsprechen muss, wird dies im Folgenden erreicht
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 ) );
);

Wenn Sie anstelle der Zeile Für jede Zeile eine Formel verwenden möchten, gilt dies für die Formel für die obige Ausgabe
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 ) );