Aggiungi contatore per casi univoci nei gruppiCiao a tutti,
Come posso scrivere un contatore di valori interi per incrementare i valori univoci nella colonna B all'interno del gruppo A, per fare ciò?

Ecco cosa ho provato finora:
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,
),
);
Uscite:


Automazione e scriptingAnalisi e modellazione dei dati di baseOggetto: Aggiungi contatore per casi univoci nei gruppiDovresti essere in grado di farlo con una combinazione di Col Rank (), Col Cumulative Sum, Col Min () e così via. In base al tuo esempio, Col Rank() o Col Cumulative Sum(1, ) dovrebbero essere sufficienti (non ci sono date duplicate in nessuno dei gruppi).
La colonna 3 utilizza Col Rank e la colonna 4 Col Cumulative Sum e la colonna 5 un'opzione di una formula un po 'più complicata
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
)
));

Oggetto: Aggiungi contatore per casi univoci nei gruppiGrazie Jarmo!La tua strada è decisamente più pulita.Non seguo totalmente la logica, ma vedo che funziona!
Nota: ho trovato un altro modo, che utilizzava anche Col Cumulative Sum().Più lento del tuo.Tabelle secondarie multiple e un join...
Summary1 = Table1 << Summary(Group(:Group, :Date));
Riepilogo2 = Riepilogo1 << Riepilogo(Gruppo(:Gruppo, :Data));
Riepilogo2 << Nuova colonna ("set di dati",
Numerico,
"Nominale",
Imposta selezionato
);
:Dataset << Formula(Col Somma cumulativa( :N Righe, :Gruppo ) );
//Unisciti alla tabella 1
Tabella1 << Unisci(
con (Tabella dati( Summary2 ) ),
Seleziona tutto),
SelezionaCon(
:Insieme di dati
),
Corrispondendo alle colonne ( :Run = :Run ),
Rilascia multipli ( 1, 0 ),
Includi mancate corrispondenze( 0, 0 ),
Conserva l'ordine della tabella principale( 1 ),
Nome tabella di output ("Tabella2")
);
Oggetto: Aggiungi contatore per casi univoci nei gruppiFaccio una nuova colonna con questa formula.
Se ( Riga () == 1 ,
1 ,
Se ( :ID == Ritardo ( :ID, 1 ),
Ritardo (: Nome ( "Conteggio ID" ) ) + 1 , 1 ))
Ciò presuppone che la colonna "ID" sia ordinata in sequenza.
la colonna Count of ID, è il nome della nuova colonna con la formula precedente
Ri: Aggiungi contatore per casi univoci nei gruppiHm, sembra che all'editor Formula manchi un file Categorie Col N funzionare con un'opzione Raggruppa per.
Wish sta aspettando Complimenti:
nuova funzione JSL: Categorie Col N
Ri: Aggiungi contatore per casi univoci nei gruppiEcco un piccolo script che produce il numero di valori univoci trovati nella colonna B, all'interno della colonna A
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 ) );
)
);Ri: Aggiungi contatore per casi univoci nei gruppibella soluzione 
(p -> b)
ma i dispersi Categorie Col N fa ancora male. Si può aggiungere a funzione personalizzata Categorie Col N (: col, <{...}>)
l'elenco opzionale può essere utilizzato per specificare colonne/sottogruppi utilizzati come da - come :a nell'esempio precedente.
Chissà come si può fare riferimento alle colonne nella funzione di riepilogo?
Funzione personalizzata: come fare riferimento alla colonna
Ri: Aggiungi contatore per casi univoci nei gruppiDi solito può essere utilizzata anche una strana combinazione di diverse funzioni Col qualcosa() (potrebbe non essere la più veloce a causa del confronto fatto e se ricordo bene non dovresti usare le funzioni Col in questo modo anche se è uno dei modi migliori di utilizzandoli).
dt << New Column("C", Formula(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
Ri: Aggiungi contatore per casi univoci nei gruppi
Si può aggiungere a funzione personalizzata Categorie Col N (: col, <{...}>)
Non in modo pulito e carino Creazione di una funzione statistica personalizzata (formula) con byVar , Opzione o funzione per valutare contemporaneamente una formula di colonna personalizzata o memorizzare nella cache i valori tra le righe
Ri: Aggiungi contatore per casi univoci nei gruppi
@jthi ha scritto:
Non in modo pulito e carino
Ahia!
Volevo aggiungere l'abitudine Categorie Col N per averla disponibile nel menu Nuova colonna formula facendo clic con il pulsante destro del mouse.
Quindi, se richiede ulteriori Espr() Espressioni attorno alle colonne quando si chiama la funzione, NON c'è alcuna possibilità di farlo bene?
Argh....
Davvero sorprendente che ci voglia così tanto tempo per aggiungere ciò che manca Categorie Col N 
Ri: Aggiungi contatore per casi univoci nei gruppiSorprendente!
A seconda della struttura della tabella, molti ordini di grandezza più veloci 
ma ancora lontano da una soluzione per il fare clic con il tasto destro Nuova colonna formula menù 
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; // < 1secRe: Aggiungi contatore per casi univoci nei gruppibuone notizie: JMP19 fornirà N Col() univoco :
https://community.jmp.com/t5/JMP-Wish-List/Col-N-Categories/idc-p/870972/highlight/true#M7292
e sarà disponibile tramite il nuovo menu della colonna formula:
