Quale sarebbe una semplice formula di colonna per ottenere valori univoci con grandi set di dati (100k righe)? È possibile?
Ad esempio, guardando Auto.jmp . La piattaforma di distribuzione fornisce già il numero di livelli (elementi univoci), ma non sono riuscito a trovare una colonna formula in grado di calcolarli.
Crea colonna --> 37 livelli (diversi produttori).
Questo viene spesso chiamato cardinalità, distinzione o numero di valori univoci.
La formula dovrebbe poter utilizzare colonne di gruppo, quindi otterremo, ad esempio, il numero di modelli per produttore.
Dove abbiamo Toyota, il valore sarà di 11 modelli. Mitsubishi 6 modelli, ecc.
Ciò è possibile anche con JMP Query Builder, ad esempio.

SELEZIONA t1.Make, COUNT(DISTINCT t1.Model) COME "Conta DISTINCT-Model"
DA Auto t1
RAGGRUPPARE PER t1.Crea;
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Cars.jmp" );
Distribution(
Nominal Distribution( Column( :Make ) ),
Nominal Distribution( Column( :Model ) ),
Local Data Filter(
Add Filter(
columns( :Make ),
Where( :Make == "Toyota" ),
Display( :Make, N Items( 15 ), Find( Set Text( "" ) ) )
)
),
SendToReport(
Dispatch( {"Make"}, "Frequencies", OutlineBox, {Close( 1 )} ),
Dispatch( {"Model"}, "Distrib Nom Hist", FrameBox,
{Frame Size( 110, 178 )}
)
)
);
Ecco la mia folle soluzione

As Constant(
t1 = Current Data Table();
Query(
t1,
"
SELECT t1.Make, COUNT(DISTINCT t1.Model) AS 'Count DISTINCT-Model'
FROM Cars t1
GROUP BY t1.Make;"
);
newdt = Current Data Table();
makeList = newdt:Make << get values;
countMat = Column( newdt, 2 ) << get values;
Close( newdt, nosave );
);
countMat[Contains( makeList, t1:make )];
Penso che questo potrebbe fornire un risultato corretto
Col Sum(Row() == Col Min(Row(), :Model, :Make), :Make)
Ma attualmente molto probabilmente andrei con Riepilogo -> aggiorna e non userei una formula
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cars.jmp");
// Formula option
newcol = dt << New Column("R", Numeric, Ordinal, Formula(
Col Sum(Row() == Col Min(Row(), :Model, :Make), :Make)
));
// Summary + update
dt_summary = dt << Summary(
Group(:Make),
N Categories(:Model),
Freq("None"),
Weight("None"),
statistics column name format("stat of column"),
private
);
// Update data table
dt << Update(
With(dt_summary),
Match Columns(:Make = :Make),
Add Columns from Update Table(:N Categories of Model),
Replace Columns in Main Table(:N Categories of Model)
);
Close(dt_summary, no save);