Hola a todos,
Tengo problemas para entender por qué falla el siguiente código:
// This code doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( selectedCol[1] ) < Col Mean( selectedCol[2] ),
begin = selectedCol[1];
end = selectedCol[2];
,
begin = selectedCol[2];
end = selectedCol[1];
);
Quiero que toda la columna se reasigne a las variables de inicio / finalización, pero no sucede. Intenté esto:
// This code still doesn't work
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( As Column( selectedCol[1] ) ) < Col Mean( As Column( selectedCol[2] ) ),
begin = As Column( selectedCol[1] );
end = As Column( selectedCol[2] );
,
begin = As Column( selectedCol[2] );
end = As Column( selectedCol[1] );
);
¿Puedo obtener alguna ayuda, tanto conceptual como práctica? Esto parece realmente simple, pero obviamente me falta algo importante.
Juan
Gracias, gracias Julian!
Eso es increíblemente útil !!!!
Juan
Hola @John Madden ,
Dos cosas que noto aquí. Primero, JSL evalúa las funciones anidadas desde el exterior hacia adentro, lo que significa que necesita un Eval () para la referencia a la columna que forma parte de su lista. Segundo, si lo entiendo correctamente, quiere que todos los valores de columna asignados comiencen y terminen. Si es así, debe enviar un mensaje a la columna para devolver esos valores: << Obtener valores. Lo siguiente debería funcionar (asumiendo que esa es tu intención).
dt = Current Data Table();
selectedCol = dt << Get Selected Columns();
If( Col Mean( eval(selectedCol[1]) ) < Col Mean( eval(selectedCol[2]) ),
begin = selectedCol[1] << Get Values;
end = selectedCol[2] << Get Values;
,
begin = selectedCol[2] << Get Values;
end = selectedCol[1] << Get Values;
);
¡Espero que esto ayude!
@Julian
Edit: puedo ver cómo alguien podría ver mi punto sobre las funciones anidadas y decir "Espera, Col Mean (selectedCol [1]) 'no es una función anidada, ¿por qué no funciona?" De hecho, la suscripción es una función, simplemente se realiza convenientemente con corchetes. Podrías haber escrito:
Col Mean( Subscript(selectedCol,1) )
y en este caso, el anidamiento de la función es obvio. Lo que sucede cuando JMP intenta evaluar este bit de código es que Col Mean () se evalúa primero, y esa función requiere una columna para operar. Le pega a una función de Subíndice () y no sabe qué hacer con ella. Por lo tanto, al ajustar Subscript () en Eval () le decimos a JMP que primero procese los subíndices (que devuelven una referencia a una columna) antes de que intente evaluar Col Mean ().
Col Mean( Eval( Subscript( selectedCol,1 ) ) )
Espero que la explicación adicional ayude!