JSL-Code & Summarize-HilfeHallo JMP-Community,
JMP Pro v17.
Ich habe ein Skript, das letzten Monat funktioniert hat, aber anscheinend nicht mehr funktioniert. Ich habe eine Datentabelle, in der eine Spalte den Namen :Date trägt (siehe angehängte Datentabelle). Das folgende Skript soll die Datentabelle nach dem Jahr( ) von :Date zusammenfassen und eine Liste von Jahren für die Variable „yrs“ generieren.
Summarize( dt, yrs = By( Year( :Date ) ) );
Beispielsweise sollte eine Liste mit Daten wie {"2022", "2023", "2024"} usw. zurückgegeben werden, da der Befehl Year( ) eigentlich nur den Jahreswert aus der Spalte :Date extrahieren sollte, was er jedoch nicht tut.
Entfernen Sie dazu den Year( )-Befehl um :Date und führen Sie ihn folgendermaßen aus:
Summarize( dt, yrs = By( :Date ) );
Als Ergebnis erhalten Sie eine Auflistung aller Einzeltermine, hier ein Auszug:
{"29.09.0263", "30.01.1930", "11.02.1955", "03.05.2002", "13.08.2002", "19.10.2002",
„01.01.2021“, „02.01.2021“, „06.01.2021“, „18.01.2021“, „30.01.2021“, „12.02.2021“,
„13.02.2021“, „15.02.2021“, „26.03.2021“, „27.03.2021“, „28.03.2021“, „30.03.2021“,
„23.04.2021“, „24.04.2021“, „25.04.2021“,}
Es gibt einige Tippfehler bei den Daten, diese können jedoch vorerst ignoriert werden.
Ich möchte eigentlich nicht alle einzelnen Daten, sondern nur eine Liste aller Jahre. Leider erhalte ich eine Null-/Leervariable für yr, wenn ich versuche, yr = Year( :Date) auszuführen. Dies kann letztendlich nicht vom nächsten By( )-Befehl im ursprünglichen JSL ausgewertet werden. Ich weiß nicht, ob ich
Was ich seltsam finde, ist, dass dieser Code vor etwa einem Monat, als ich ihn erstellt habe, scheinbar einwandfrei funktionierte, jetzt aber nicht mehr so funktioniert wie vorher.
Ich bin sicher, dass ich etwas Einfaches übersehe, das dieses Problem verursacht, aber ich kann nicht herausfinden, was es ist. Oder ich denke an Summarize( ) und/oder wie es die By( )-Gruppe darin verwendet.
Danke für alle Gedanken/Feedback!,
DS
Automatisierung und SkriptingMassenanpassungWindowsBetreff: JSL-Code & Hilfe zusammenfassenHallo,
Sie müssen die Jahresfunktion wie folgt auswerten:
Eval(Eval Expr(summarize (dt, yr = By(Year(:Date)))));
Am besten,
TS
Betreff: JSL-Code & Hilfe zusammenfassenIch glaube nicht, dass Sie das mit Summarize tun können, aber Sie könnten Summary mit Transform Column verwenden, wenn Sie keine neue Spalte in Ihrer Tabelle erstellen möchten
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
Show(years);
Betreff: JSL-Code & Hilfe zusammenfassenHallo @Thierry_S und @jthi ,
Vielen Dank euch beiden für das schnelle Feedback und die Ideen. Vielleicht habe ich es aber auch zu schnell als erledigt markiert, weil gerade etwas Seltsames passiert ist.
Ich habe versucht, @Thierry_S 's Eval( Eval Expr( )) um den Summary-Befehl herum auszuführen, und es hat funktioniert, als ich es an der Testdatentabelle (die mit nur den Datumsangaben) getestet habe. Sobald ich aber zur ursprünglichen Datentabelle gewechselt bin, hat es nicht mehr funktioniert und ich habe die folgende Fehlermeldung erhalten: Spalte beim Zugriff oder bei der Auswertung von „Jahr“, Jahr/*###*/(:Datum) nicht gefunden.
Wenn ich jetzt zurückgehe und versuche, dies mit der „falschen“ Datentabelle mit den Datumsangaben zu tun, erhalte ich erneut den Fehler.
@jthi , Ihre Option ist eine Möglichkeit, aber ich müsste sie von einer Matrix (oder einem 1-D-Vektor in eine Liste von Zahlen) umwandeln – gibt es eine schnelle Möglichkeit, das zu tun? Ich muss es tun, weil ich die Liste der Jahre in einem assoziativen Array verwende.
Danke!,
DS
Betreff: JSL-Code & Hilfe zusammenfassenSind die Schlüssel in Ihrem assoziativen Array ganze Zahlen oder Zeichenfolgen? Wenn es ganze Zahlen sind, können Sie As List() verwenden)
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(As List(years)); // As List(years) = {263, 1930, 1955, 2002, 2021, 2022, 2023, 2024, 2025};
Und wenn es sich um Zeichenfolgen handelt, würde ich die Spalte in Zeichen ändern und dann die Werte nehmen
Names Default To Here(1);
dt = Open("$DOWNLOADS/Date.jmp");
dt_summary = dt << Summary(
Group(Transform Column("Year", Formula(Year(:Date)))),
Freq("None"),
Weight("None"),
Link to original data table(0),
output table name("Summary of Date grouped by Year"),
Private
);
Column(dt_summary, 1) << Set Data Type("Character");
years = dt_summary[0, 1];
Close(dt_summary, no save);
show(years); // years = {"263", "1930", "1955", "2002", "2021", "2022", "2023", "2024", "2025"};
Betreff: JSL-Code & Hilfe zusammenfassenIch habe ein Skript, das letzten Monat funktioniert hat
möglicherweise aufgrund einer bereits vorhandenen Spalte?

Betreff: JSL-Code & Hilfe zusammenfassenSummarize funktioniert mit Transform-Spalten:
dt = Open( "$SAMPLE_DATA/Hurricanes.jmp" );
dt << Transform Column( "tmp", Formula( year(:date) ) );
Summarize(years = by (tmp));
//dt << Delete Columns( :tmp );
Show(years)
Keine Sorge, wenn Sie vergessen, die Transformationsspalte zu löschen, sie ist nach dem nächsten „Öffnen“ verschwunden.
Betreff: JSL-Code & Hilfe zusammenfassenHallo @jthi ,
Vielen Dank für das Feedback und den Vorschlag. Ich brauche die Jahre als Zeichenfolgen, da ich sie später in einer Kombinationsbox verwenden werde, die nur Zeichenfolgen akzeptiert.
Vielen Dank für die Hilfe und Fehlerbehebung!
DS
Betreff: JSL-Code & Hilfe zusammenfassenHallo @hogi ,
Alle Datentabellen haben den gleichen Spaltennamen :Date und es sind alles numerische, fortlaufende Spalten, daher bin ich mir nicht sicher, warum es vorher funktioniert hat und jetzt nicht. Und was seltsam ist: Es funktioniert für die Datentabelle Hurricanes.jmp, aber nicht für meine. Ich verstehe wirklich nicht, warum das passiert, aber es ist so.
Wie dem auch sei, die von Jarmo vorgeschlagene Methode funktioniert gut und ist nicht so kompliziert wie der Befehl Summarize(By()).
Danke!,
DS
Betreff: JSL-Code & Hilfe zusammenfassenFür Hurricanes.jmp funktioniert es aufgrund der Spalte :year .
JMP leitet das Jahr(:Datum) auf :Jahr um?!?
Betreff: JSL-Code & Hilfe zusammenfassenHallo @hogi , vielleicht. Ich habe keine Ahnung und verstehe nicht, warum JSL so etwas tun würde. Ich habe diese Theorie gerade ausprobiert und tatsächlich hat der Summarize-Befehl NICHT funktioniert, weil die Spalte :Year fehlte. So seltsam! Und obwohl die Spalte :Date eine Formel in der Datei Hurricanes.jmp ist, spielt das keine Rolle. Wenn die Formel entfernt wird, funktioniert es einwandfrei, aber wenn die Spalte :Year gelöscht wird, funktioniert es nicht mehr. Ich verstehe die JSL-Logik dahinter nicht, aber so ist es nun einmal.