¿Cómo calcular un partido con JSL?¡Hola a todos!
En Excel, las funciones "= offset (, match (,,) - 1, match (,,) - 1 ,,)" se pueden usar para calcular, pero la velocidad es lenta cuando los datos son grandes.
¿Cómo hacer esto con JSL? ¡Gracias!
Re: ¿Cómo calcular una coincidencia con JSL?Sí, Excel es conveniente usar las funciones de la hoja de trabajo dentro de 10,000 filas.
Más de 10,000 filas estoy acostumbrado a hacer esto con un diccionario VBA. Pero los diccionarios de más de 100,000 son lentos.
Ahora, utilizando este método de JMP, más de 10 millones de líneas también son rápidas. ¡Gracias!Re: ¿Cómo calcular una coincidencia con JSL?No veo el beneficio para la comunidad de usuarios de JMP de la declaración en su última respuesta,
" También es rápido usar un diccionario en Excel …… Set d = CreateObject ("Scripting.Dictionary") "
Parece que tal comentario sería más apropiado en el Foro de Discusión de Excel
Re: ¿Cómo calcular una coincidencia con JSL?Muchas gracias por su ayuda.
También es rápido usar un diccionario en Excel …… Set d = CreateObject ("Scripting.Dictionary")
Pero más de un millón de líneas tendrán que hacerse de manera diferente.Re: ¿Cómo calcular una coincidencia con JSL?Aquí hay algunas maneras, para apilar con un número variable de columnas, si está utilizando coincidir en Excel hoy, es probable que funcione uno de los dos primeros métodos:
//If the column positions do not change
d3_1 = d1 << Stack(
columns( Concat( [2 3], 4::10 )),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If you want all columns
d1_clean = ( d1 << Subset( All rows, columns( 1::10 ) ) );
d3_2 = d1_clean << Stack(
columns( 2:: ncol(d1_clean) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
//If the column names are in a specific format
// - get column names
cn = d1 << Get Column Names( string );
// - Find which columns match a format
// (jmp does have some patter matching tools but I like regex, check out regexr.com)
matches = repeat(0, N Items(cn));
for(c=1, c<= N Items(cn), c++, if(!is missing(Regex(cn[c], "^\d+$")), matches[c] = 1));
// - Stack
d3_3 = d1 << Stack(
columns( loc(matches) ),
Source Label Column( "year" ),
Stacked Data Column( "data" ),
Drop all other columns( 1 ),
Keep( :state )
);
Re: ¿Cómo calcular una coincidencia con JSL?Si estas columnas son muchas, como más de 1000 ... Digamos que es una fecha.
¿Cómo implementan estas columnas la configuración de la tabla d3 en la forma de un bucle de variables? ¡Gracias!

Re: ¿Cómo calcular una coincidencia con JSL?buen trabajo graciasRe: ¿Cómo calcular una coincidencia con JSL?Ya que le preocupa la velocidad con tablas grandes, puede crear una 'tabla de búsqueda' en un formato largo para que haya una fila por valor y luego usar con Unir o Actualizar para realizar la búsqueda. Aquí es cómo podría verse:
Names default to here( 1 );
d1 = Open( "$SAMPLE_DATA/Presidential Elections.jmp" );
d2 = New Table( "offset",
Add Rows( 8 ),
New Column( "State",
Character,
"Nominal",
Set Values(
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
),
New Column( "year",
Character,
"Ordinal",
Set Values( {"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"} )
),
New Column( "data",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ))
);
//Move data to a long format
d3 = d1 << Stack(
columns(
:Name( "1980" ),
:Name( "1984" ),
:Name( "1988" ),
:Name( "1992" ),
:Name( "1996" ),
:Name( "2000" ),
:Name( "2004" ),
:Name( "2008" ),
:Name( "2012" )
),
Source Label Column( "year" ),
Stacked Data Column( "data" )
);
d3 << Set Name( "Long format" );
d3:year << Set Modeling Type("Ordinal");
//'Lookup' the values:
d2 << Update( with(d3), Match Columns( :state=:state, :year=:year ), Add Columns from Update table( None ));
d3 << Close window;
Re: ¿Cómo calcular una coincidencia con JSL?Calcule el valor de "datos" en la tabla "compensación" basándose en los datos de la tabla "Elecciones presidenciales".
¡Gracias!Re: ¿Cómo calcular una coincidencia con JSL?d1 = Abrir ("$ SAMPLE_DATA / Presidential Elections.jmp");
d2 = Nueva tabla ("offset",
Añadir filas (8),
Nueva columna ("Estado",
Personaje,
"Nominal",
Establecer valores (
{"Wyoming", "Montana", "Montana", "Alaska", "Wisconsin", "Nebraska", "Nevada", "Montana"}
)
)
Nueva columna ("año",
Personaje,
"Nominal",
Valores establecidos ({"1988", "1988", "1988", "1992", "2000", "1992", "2004", "1980"})
)
Nueva columna ("datos", carácter, "nominal",),
);