<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo allerseits,
Ich bin ein Neuling im Scripting und versuche total nach informativen Tutorials zu JSL zu suchen. Ich werde wirklich jede Hilfe bei meinem Problem zu schätzen wissen.
Grundsätzlich muss ich nach: Stadt sortieren und den Wert in jedem Element zusammenfassen: Anzahl und dann anzeigen. Das Problem ist, dass ich dynamisch eine Liste aller verschiedenen Zeichenfolgen in: Stadt erstellen und dann alle numerischen Werte in: Summe für die Zeilen zusammenfassen muss, die übereinstimmende Zeichenfolgen in der Spalte: Stadt haben.
Die Tabelle würde zum Beispiel so aussehen
tableEx =
| Stadt | Menge |
|---|
| a1 | 100 |
| a2 | 10 |
| a9 | 29 |
| a1 | 99 |
| a4 | 20 |
| a7 | 91 |
| a2 | 60 |
| a100 | 33 |
| a500 | 30 |
| a100 | 14 |
| a99 | 2000 |
| usw... | usw... |
Dieser nächste Teil muss nicht gelesen werden, um mein Problem zu lösen. Er beschreibt nur, wie ich das Problem in meinem Kopf lösen möchte. Ich wünschte, ich könnte so etwas tun.
List_Of_CityNames = neue Liste ();
Schalter = falsch;
Foreach-Zeile r in tableEx
{
Foreach String-Stadt in List_Of_CityNames
{
if (r.Get (Stadt) == Stadt)
switch = true; // bedeutet die Zeile dieser Zeile: Der Ortseintrag ist bereits in der Liste, daher müssen wir ihn nicht hinzufügen.
}
if (switch == false) // Wenn diese Zeile: Stadt noch nicht in die Liste aufgenommen wurde, wird diese ausgeführt
{
List_Of_CityNames.Add (r.Get (City)); // Stadt zur Liste hinzugefügt
}
Schalter = falsch; // Umschalten auf Stadt nicht in der Liste gefunden
}
Wenn dies funktionieren würde, hätte ich die Liste aus Tupeln gemacht und sie zu einem String + Int-Paar gemacht, damit ich die Anzahl übereinstimmender Städte in der obigen Schleife zusammenfassen kann. Dann würde ich es einfach ausdrucken, indem ich eine Neue Tabelle () mache, wenn ich könnte.
Nachdem ich die oben genannten Informationen gesammelt hatte, müsste ich sie dann ausdrucken. Würde jemand zufällig wissen, wie eine Tabelle erstellt wird, die auf der dynamischen Größe der Liste basiert, die möglicherweise Teil der ersten Lösung ist.
dtSolution = Neue Tabelle ("Lösung",
Zeile hinzufügen (/ * numerischer Wert, der die Anzahl der verschiedenen Städtenamen * / darstellt)
Neue Spalte ("/ * erste Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
Neue Spalte ("/ * zweite Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
Neue Spalte ("/ * dritte Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
Neue Spalte ("/ * vierte Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
Neue Spalte ("/ * fünfte Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
Neue Spalte ("/ * Sechste Stadt in der Liste * /", "Continuous", Set Values (Liste (/ * Variable, die die Summe darstellt: Anzahl für gleiche Städte * /))),
etc, bis jede Stadt zur Tabelle hinzugefügt wurde // Nach dem Erstellen der neuen Tabelle müsste ich wahrscheinlich eine foreach-Schleife verwenden, um jede Zeile nacheinander zu der Tabelle hinzuzufügen, die auf der Liste basiert, die in pt.1 erstellt wurde
);
Ich bin wirklich dankbar für jede Hilfe, die ich bekommen kann. Ich danke Ihnen auch, wenn Sie das alles durchgelesen haben.
Vielen Dank,
Loysius
Loysius,
Ich hätte erwähnen sollen, dass Tabulate in JMP 10 im Menü Tables angezeigt wird. Es wurde in das Analyse-Menü verschoben, beginnend mit JMP 11.
-Michael
Das kleine rote Dreieck im Tabellenfenster ermöglicht das Speichern der Tabelle als Datentabelle.
Klicken Sie in Michaels Lösung nach dem Erstellen der gewünschten Tabelle auf das rote Dreieck und wählen Sie "In Datentabelle erstellen". Dies entspricht im Wesentlichen dem, was ich in JSL gemacht habe.
Danke, Michael und PMroz!
Ich habe Tabulate im Tabellenmenü gefunden, aber vielen Dank für Ihr Feedback. Ich wusste nicht, dass es möglich war, die JSL-Version von Tabellen in die Zwischenablage zu kopieren und sie in mein Skript einzufügen.
Leider kopieren sie das Einfügen nicht so, dass sie direkt verwendbar sind, sie müssen jedoch noch geändert werden, bevor sie funktionieren. In diesem Fall zeigt die Lösung von PMroz die Syntax, damit alles richtig funktioniert.
Mit freundlichen Grüßen,
Loysius
Hier ist es als JSL-Programm:
// Erstellen Sie eine Beispieltabelle
dt = Neue Tabelle ( "CityQty" . Zeilen hinzufügen ( 11 ) .
Neue Spalte ( "Stadt" . Charakter . Nominal .
Werte setzen ( { "a1" . "a2" . "a9" . "a1" . "a4" . "a7" . "a2" . "a100" . "a500" . "a100" . "a99" } ) ) .
Neue Spalte ( "Anzahl" . Numerisch . Kontinuierlich . Format ( "Beste" . 12 ) .
Werte setzen ( [ 100 . 10 . 29 . 99 . 20 . 91 . 60 . 33 . 30 . 14 . 2000 ] ) )
) ;
// Eine unsichtbare Tabelle erstellen
dtab = dt << Tabellarisch (
Systemsteuerung anzeigen ( 0 ) .
Tabelle hinzufügen (
Säulentabelle ( Analysespalten ( : Menge ) ) .
Row Table ( Spalten gruppieren ( : Stadt ) )
) . unsichtbar .
) ;
// Konvertieren Sie die Tabelle in eine Tabelle
dt_new = dtab << In Datentabelle machen ;
// Die Tabellierung löschen
dtab << Fenster schließen ;
Wenn Sie in einer Datentabelle die Spalten "Stadt" und "Anzahl" haben, können Sie wahrscheinlich "Tabulieren" (im Menü "Analysieren") verwenden.
Gehen Sie zu Analysieren> Tabellieren.
Ziehen Sie die Stadt in "Drop zone for row".
Ziehen Sie Qty in die Kopfzeile, wo jetzt "N" angezeigt wird.
Klicken Sie auf Fertig.
Ich denke, das sollte Ihnen eine sortierte Liste der Städte mit den entsprechenden Mengen geben.
Um dies später über ein Skript zu reproduzieren, können Sie das rote Dreieck-Menü in Tabulate verwenden, um zu Skript> Skript im Skriptfenster speichern zu gehen (oder an verschiedenen anderen Orten, einschließlich der ursprünglichen Datentabelle).
Hoffentlich hilft das,
Michael