Zähler für eindeutige Fälle in Gruppen hinzufügenHallo alle,
Wie kann ich einen ganzzahligen Wertzähler schreiben, um eindeutige Werte in Spalte B in Gruppe A zu erhöhen, um dies zu tun?

Hier ist, was ich bisher versucht habe:
dt_Table1 = Data Table("Table1");
dt_Table1 << New Column("Dataset", Numeric, "Nominal", Set Selected);
Sum1 = dt_Table1 << Summary(Group(:Group, :Date));
Sum2 = Sum1 << Summary(Group(:Group));
:N Rows << Set Name("N Datasets in Group");
dt_Table1 << Update(
with(Data Table(Sum2)),
Merge Same Name Columns
Match Flag(0),
Suppress foruma evaluation(0),
By Matching Columns(:Group = :Group),
Drop multiples(1, 0),
Include Nonmatches(0, 0),
Preserve main table order(1)
);
dt = dt_Table1;
For(i = 1, i <= :N Rows(dt), i++,
While(Group_Number = GetValue(:Group[i]),
N == Get Value(dt, :N Datasets in Group[i]),
For(j = 1, j <= N, j++,
:Dataset << Set Value == (j),
),
Group_Number = Group_Number + 1,
),
);
Ausgänge:


Automatisierung und SkripterstellungGrundlegende Datenanalyse und ModellierungBetreff: Zähler für eindeutige Fälle in Gruppen hinzufügenSie sollten dies mit einer Kombination aus Col Rank(), Col Cumulative Sum, Col Min() usw. tun können. Basierend auf Ihrem Beispiel sollte Col Rank() oder Col Cumulative Sum(1, ) ausreichen (in keiner der Gruppen gibt es doppelte Daten).
Spalte 3 verwendet Col Rank und Spalte 4 Col Cumulative Sum und Spalte 5 eine Option einer etwas komplizierteren Formel
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(8),
Compress File When Saved(1),
New Column("g", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 1, 2, 2, 2, 2])),
New Column("d", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("r", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(Col Rank(:d, :g))),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Formula(Col Cumulative Sum(1, :g)))
);
dt << New Column("Column 5", Numeric, Continuous, Formula(
Col Cumulative Sum(
If(Row() == Col Min(Row(), :g, :d),
1
,
.
),
:g
)
));

Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügenDanke Jarmo!Dein Weg ist auf jeden Fall sauberer.Ich folge der Logik nicht ganz, aber ich sehe, dass es funktioniert!
Hinweis: Ich habe einen anderen Weg gefunden, der auch Col Cumulative Sum() verwendet.Langsamer als deins.Mehrere Untertabellen und ein Join ...
Zusammenfassung1 = Tabelle1 << Zusammenfassung(Gruppe(:Gruppe, :Datum));
Zusammenfassung2 = Zusammenfassung1 << Zusammenfassung(Gruppe(:Gruppe, :Datum));
Zusammenfassung2 << Neue Spalte( „Datensatz“,
Numerisch,
„Nominal“,
Ausgewählte festlegen
);
:Dataset << Formula(Col Cumulative Sum( :N Rows, :Group ) );
//Zu Tabelle 1 hinzufügen
Tabelle1 << Join(
mit (Datentabelle(Zusammenfassung2)),
Wählen Sie Alle),
SelectWith(
:Datensatz
),
Durch übereinstimmende Spalten( :Run = :Run ),
Drop-Vielfache( 1, 0 ),
Nichtübereinstimmungen einschließen (0, 0),
Behalten Sie die Reihenfolge der Haupttabelle bei (1),
Name der Ausgabetabelle („Table2“)
);
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügenIch erstelle eine neue Spalte mit dieser Formel.
Wenn ( Reihe () == 1 ,
1 ,
Wenn ( :ID == Verzögerung ( :AUSWEIS, 1 ),
Verzögerung ( : Name ( „Anzahl der ID“ ) ) + 1 , 1 ))
Dies setzt voraus, dass Ihre Spalte „ID“ der Reihe nach sortiert ist.
Die Anzahl der IDs, Spalte ist der Name der neuen Spalte mit der obigen Formel
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügenHm, anscheinend fehlt im Formeleditor ein Col N Kategorien Funktion mit eine GroupBy-Option.
Wish wartet auf Kudos:
neue JSL-Funktion: Col N Kategorien
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügenHier ist ein kleines Skript, das die Anzahl der eindeutigen Werte in Spalte B innerhalb von Spalte A ermittelt
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
charList = {"A","B","C","D","E","F","G","H","I","J"};
dt << add rows(25);
for each row(
:A = char(random integer(1,5));
:B = charList[random integer(1,10)]
);
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :p</img> ) ) );
N Items( Loc( bygroup[1], :a ) );
)
);Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügennette Lösung 
(p -> b)
aber das fehlt Col N Kategorien tut noch weh. Kann man ein hinzufügen benutzerdefinierte Funktion Col N Kategorien (: col, <{...}>)
Die optionale Liste könnte verwendet werden, um Spalten/Untergruppen anzugeben, die von verwendet werden – wie :a im vorherigen Beispiel.
Wer weiß, wie in der Zusammenfassungsfunktion auf die Spalten verwiesen werden kann?
Benutzerdefinierte Funktion – So referenzieren Sie die Spalte
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügenNormalerweise kann auch eine seltsame Kombination verschiedener Col-something()-Funktionen verwendet werden (aufgrund des durchgeführten Vergleichs ist dies möglicherweise nicht die schnellste, und wenn ich mich recht erinnere, sollten Sie Col-Funktionen nicht auf diese Weise verwenden, obwohl dies eine der besten Methoden ist). benutze sie).
dt << New Column("C", Formula(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügen
Kann man ein hinzufügen benutzerdefinierte Funktion Col N Kategorien (: col, <{...}>)
Nicht auf saubere und schöne Weise Erstellen einer statistischen benutzerdefinierten (Formel-)Funktion mit byVar , Option oder Funktion zum sofortigen Auswerten einer benutzerdefinierten Spaltenformel oder zum Zwischenspeichern von Werten zwischen Zeilen
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügen
@jthi schrieb:
Nicht auf saubere und schöne Weise
Autsch!
Ich wollte den Brauch hinzufügen Col N Kategorien Funktion, damit sie im Rechtsklick-Menü „Neue Formelspalte“ verfügbar ist.
Also, wenn es zusätzliches erfordert Ausdruck() Ausdrücke um die Spalten beim Aufruf der Funktion, es gibt KEINE Chance, das richtig hinzubekommen?
Argh....
Wirklich erstaunlich, dass es so lange dauert, das Fehlende hinzuzufügen Col N Kategorien 
Betreff: Zähler für eindeutige Fälle in Gruppen hinzufügentoll!
Je nach Aufbau der Tabelle um viele Größenordnungen schneller 
aber noch weit entfernt von einer Lösung für das Rechtsklick Neue Formelspalte Speisekarte 
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
dt << add rows(20000);
for each row(
:A = char(random integer(1,5));
:B = char(random integer(1,1000));
);
t0 = hptime();
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :b) ) );
N Items( Loc( bygroup[1], :a ) );
)
);
(hptime() -t0)/1000000; //~ 1min
t0 = hptime();
dt << New Column("C", set each value(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
(hptime() -t0)/1000000; // < 1secBetreff: Zähler für eindeutige Fälle in Gruppen hinzufügenGute Neuigkeiten: JMP19 wird Eindeutige N-Spalte() bereitstellen:
https://community.jmp.com/t5/JMP-Wish-List/Col-N-Categories/idc-p/870972/highlight/true#M7292
und es wird über das neue Formelspaltenmenü verfügbar sein:
