Wählen Sie den Zeilenbereich um das Startdatum der Benutzereingabe ausIch arbeite mit einem großen Datensatz über viele Jahre, der auf zwei Spalten mit den Namen „ID“ und „Test_date“ vereinfacht werden kann. Das Datum ist als „M/T/J“ formatiert und die Datentabelle ist chronologisch sortiert. Ich möchte alle Zeilen auswählen, deren Testdatum innerhalb eines Jahres (vor oder nach) des vom Benutzer angegebenen Testdatums liegt, und dann alle anderen Zeilen aus der Datentabelle löschen.
Unten ist, was ich bisher versucht habe. Ich habe die oberen und unteren Datumsgrenzen für eine Eingabe-ID erstellt, kann die Daten innerhalb dieses Bereichs jedoch nicht mit „select where()“ auswählen. Stattdessen erhalte ich die Fehlermeldung „Das Argument für SelectWhere wurde nicht als wahr oder falsch ausgewertet, es ist [0] …“ ". Jede Hilfe hierzu wäre sehr dankbar.
dt << current data table();
dt << new column("T_YEAR", numeric, continuous, set each value(:Test_date / (365*86400)));
setpoint = ;//user specified numeric value
set_row= dt << get rows where(:ID == setpoint);
set_date = dt:T_YEAR[set_row] ;
set_min = (set_date - 1);
set_max = (set_date + 1);
dt << select where(:T_YEAR >= set_min & :T_YEAR <= set_max )
<< invert row selection
<< delete rows;Betreff: Wählen Sie den Zeilenbereich um das Startdatum der Benutzereingabe aus@gebogen , es sieht so aus, als hätten sich Ihre und meine Antwort überschnitten.
Das funktioniert bei mir.
dt=open("$SAMPLE_DATA\TechStock.jmp");
set_date=datemdy(12, 15, 2000);
set_min = (set_date - In Days(5));
set_max = (set_date + In Days(5));
dt << select where(:Date >= set_min & :Date <= set_max )
<< invert row selection
<< delete rows;
Beachten Sie, dass ich nur deshalb zu „In Days()“ statt zu „Years“ wechseln musste, weil die Beispieldaten nicht mehr als ein Jahr enthielten, aber ansonsten sollte dies für Sie funktionieren.
Betreff: Wählen Sie den Zeilenbereich um das Startdatum der Benutzereingabe ausEs gibt viele Möglichkeiten, dies zu tun.
Du kannst den ... benutzen In Jahren() Funktion, um den JMP-Datum/Uhrzeit-Wert für eine Reihe von Jahren zurückzugeben, oder die Datumserhöhung() Funktion zum Addieren oder Subtrahieren einer Anzahl von Jahren.
Außerdem könnten Sie das bekommen Jahr() Ihres festgelegten Datums, addieren Sie 1 dazu und verwenden Sie das Datum MDY() Funktion, um Ihnen den JMP-Datumswert zu liefern.
set_min = (set_date - In Years(1));
set_max = (set_date + In Years(1));
//or
set_min = Date Increment(set_date, "Year", -1, "actual");
set_max = Date Increment(set_date, "Year", 1, "actual");
//or
set_min = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) - 1 );
set_max = Date MDY( Month( set_date ), Day( set_date ), Year( set_date ) + 1 );
Betreff: Wählen Sie den Zeilenbereich um das Startdatum der Benutzereingabe ausJa, das habe ich im Wesentlichen getan, indem ich mit Test_date/ (365*86400) eine neue Spalte „T_YEAR“ erstellt habe, in der das Datum in Jahre konvertiert wurde. Ich habe beides ausprobiert und es funktioniert in beiden Fällen. Das Problem scheint aufzutreten, wenn die Variablen set_min und set_max in select where() verwendet werden, um alle Zeilen zwischen diesen Werten zu finden.
Betreff: Wählen Sie den Zeilenbereich um das Startdatum der Benutzereingabe ausDatums- und Uhrzeitangaben werden in Sekundeneinheiten angegeben. Gehen Sie also folgendermaßen vor:
set_min = (set_date - (1 * 365 * 24 * 3600));
set_max = (set_date + (1 * 365 * 24 * 3600));