Gracias Jim y MS. ¡Funciona brillantemente!
Si desea una fórmula de columna, esto debería funcionar. Independiente de la clasificación.
Local( {L = Associative Array( :Label ) << get keys}, Loc( L, :Label ) )
El mismo enfoque podría usarse en JSL sin una fórmula de columna.
dt = Current Data Table();
dt << New Column( "Rank Unique", continuous );
L = Associative Array( :Label ) << get keys;
For Each Row( :Rank Unique = Loc( L, :Label ) );
dt = current data table();
dt:Rank << delete formula;
Hay un par de maneras de hacer esto... (que se me ocurra, tan temprano en la mañana)
- Utilice una tabla de resumen para crear los rangos
- Ejecutar tablas ==> Resumen
- Agrupe por su columna de etiqueta
- Suponiendo que la tabla de datos de salida está ordenada de menor a mayor, cree una nueva columna llamada "Clasificación" y déle la fórmula ........ Fila ()
- Ejecute Tables==>Update para volver a unir la tabla de resumen a la tabla original, haciendo coincidir la columna Etiqueta
- Crear una nueva columna de fórmula de clasificación
- Ordenar los datos por etiqueta
- Cree una nueva columna llamada Rango con la fórmula
If( Row() == 1,
count = 1,
If( :Label != Lag( :Label ),
count
++)
);
count;
- Asegúrese de ir a Información de la columna y elimine la columna después de crearla.La razón de esto es que dado que la fórmula se basa en el orden de los datos y la integridad de los datos, cualquier cambio en los datos (clasificación, etc.) volverá a ejecutar la fórmula y posiblemente cambiará las clasificaciones.
Quiero calcular una nueva columna para clasificarla de forma única. A continuación se muestran los resultados de ejemplo que quiero lograr. Pero utilizar la fórmula de clasificación JSL no me ayuda a lograr lo que quiero. ¿Alguien puede aconsejarme?
La fórmula que uso es Col Rank(:Label)
| Etiqueta | Rango | Lo que quiero |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,máx. | 1 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,máx. | 2 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,máx. | 3 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,máx. | 4 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,máx. | 5 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,máx. | 6 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,máx. | 7 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,máx. | 8 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,máx. | 9 | 3 |
Esto ya se resolvió hace tiempo, pero ayer encontré una solución que pensé compartir por si a alguien le resulta útil. Crea una nueva columna de fórmula con esta fórmula:
Col Maximum(
Col Rank(
If( Row() == Col Minimum( Row(), :Label ),
:Label,
.
)
),
:Label
)
Básicamente, esto crea primero una nueva matriz con la etiqueta en la fila correspondiente a su primera instancia en la columna original y "." en el resto. Luego, solicitamos la clasificación de cada etiqueta, lo que genera otra matriz con la clasificación de la etiqueta en lugar de la etiqueta misma. Finalmente, generamos una matriz con la clasificación de todas las filas con esa etiqueta, que es lo que termina en la columna de fórmula.
En mi caso, intentaba clasificar grupos de conjuntos de datos según su valor más alto en otra columna. Por ejemplo, con las columnas Grupo, Conjunto, Tiempo y Valor, quería determinar la clasificación del conjunto dentro del grupo según el valor más alto observado a lo largo del tiempo. Aquí hay una fórmula que funcionó:
Col Maximum(
Col Rank(
If ( Row() == Col Minimum( Row(), :Group, :Set),
Col Maximum( :Value, :Group, :Set ),
.
),
:Group,<BR /> <
<TIE></TIE> ),
:Group, :Set
)
No sé si esta sea la mejor manera, pero funciona y ChatGPT no pudo ofrecer ninguna solución, así que tal vez esto ayude a alguien.