¿Cuál sería una fórmula de columna simple para obtener valores únicos con conjuntos de datos grandes (100 000 filas)? ¿Es posible?
Por ejemplo, al consultar Coches.jmp , la plataforma de distribución ya proporciona el número de niveles (elementos únicos), pero no encontré una columna de fórmula que los calcule.
Hacer columna --> 37 niveles (diferentes fabricantes).
A esto a menudo se le llama cardinalidad, distinción o número de valores únicos.
La fórmula debe poder utilizar columnas de grupo de forma que obtendremos, por ejemplo, el número de modelos por fabricante.
Donde tenemos Toyota, el valor será de 11 modelos. Mitsubishi 6 modelos, etc.
Esto también es posible con JMP Query Builder, por ejemplo.

SELECCIONAR t1.Make, CONTAR(DISTINCT t1.Model) COMO "Contar DISTINCT-Modelo"
DESDE Coches t1
AGRUPAR POR t1.Hacer;
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 )}
)
)
);
Aquí está mi solución loca.

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 )];
Creo que esto podría proporcionar un resultado correcto.
Col Sum(Row() == Col Min(Row(), :Model, :Make), :Make)
Pero actualmente lo más probable es que opte por Resumen -> Actualizar y no utilice una fórmula.
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);