Estoy intentando desarrollar un complemento JMP por primera vez utilizando el generador de aplicaciones, pero me quedé atascado con el script JSL como se describe a continuación:
Algunos antecedentes:
La interfaz se creó en la pestaña Diálogo.
Hay tres cuadros de panel con los títulos de Columnas, Roles y Acción, y nombres de variables de ColumnsPanel, RolesPanel y ActionPanel, respectivamente.
En el panel Columnas, agregué un cuadro de lista de columnas (Todos) con el nombre de variable ColList donde ingresa a todas las columnas de la tabla de datos abierta.
En el panel Roles, agregué tres cuadros de lista de columnas y tres cuadros de botones:
los nombres de las variables para el primer, segundo y tercer cuadro de lista Col son ResponseColList, FactorColList y BlockColList, respectivamente.
los nombres de las variables para el primer, segundo y tercer cuadro de botones son ResponseButton, FactorButton y BlockButton, respectivamente.
los títulos del primer, segundo y tercer cuadro de botones son Respuesta, Factor y Bloque, respectivamente.
En el panel Acción, agregué tres cuadros de botones con los títulos Aceptar, Eliminar y Cancelar, y nombres de variables de OKButton, RemoveButton y CancelButton, respectivamente.
Cuando hago clic en el botón Respuesta, agrega las columnas del atributo "A", "B", "C", "D" y "E" de ColList.
De manera similar, cuando hago clic en el botón Factor y bloquear, se agrega la columna "Sitio" y "Personas" de ColList.

Guiones:
//Part I
//Places selected columns into Role panel
On Response = Function({},
ResponseColList << Append( AllColList << Get Selected)
);
//Places selected columns into Factor panel
On Factor = Function({},
FactorColList << Append( AllColList << Get Selected)
);
//Places selected columns into Block panel
On Block = Function({},
BlockColList << Append( AllColList << Get Selected)
);
// Program the OK Button
On OK = Function({},
Response = ResponseColList << Get Items;
Factor = FactorColList << Get Items;
Block = BlockColList << Get Items;
// Get the current data table
dt = Current Data Table();
// Perform principal component analysis
pca = dt << Principal Components(
Y( Eval List( Response ) ),
Estimation Method( "NIPALS" ),
Standardize( "Standardized" )
);
pca << Save Principal Component Values( 3 );
pca << Close Window();
// Create a subset and delete columns "Prin1", "Prin2" and ""Prin3" in "dt"
dt << Subset(
Output Table("MET"),
All rows,
columns(Eval List(Block), Eval List(Factor), :Prin1, :Prin2, :Prin3)
);
dt << Delete Columns( "Prin1" ) << Delete Columns( "Prin2" ) << Delete Columns( "Prin3" );
// Standardize column attributes and create a data table "MET"
Current Data Table(Data Table("MET"));
For Each({col, index}, {:Prin1, :Prin2, :Prin3},
col << Format("Fixed Dec", 12, 2)
);
MET = Data Table( "MET" );
//Part II
//Get the levels in the Factor column
factorLevels = Associative Array(MET, Column(Eval List(Factor))) << Get Keys;
level1 = factorlevels[1];
level2 = factorlevels[2];
// Create two subsets named "Group1" and "Group2"
MET << Select Where( Column(Eval List(Factor)) == level1 ) << Subset( Output Table( "Group1" ), Selected Rows( 1 ), Selected columns only( 0 ) );
MET << Select Where( Column(Eval List(Factor)) == level2 ) << Subset( Output Table( "Group2" ), Selected Rows( 1 ), Selected columns only( 0 ) );
Group1 = Data Table( "Group1" );
Group2 = Data Table( "Group2" );
// Access the Site levels in "Group1" and "Group2"
Site_level1 = Column( Group1, "Site" ) << Get Values;
Site_level2 = Column( Group2 "Site" ) << Get Values;
);Puedo ejecutar con éxito los scripts de la Parte I, pero sigo recibiendo errores en la Parte II, así que realmente agradezco algo de ayuda para depurar el código.
Otro objetivo aquí es manejar conjuntos de datos con diferentes nombres de atributos (por ejemplo, atributo "F", "G", etc.). Me gustaría asegurarme de que el script utilice los nombres de las columnas seleccionadas de forma dinámica en lugar de codificar nombres específicos.
¡Gracias!
¿Qué partes de la Parte 2 están fallando y aparecen errores?
La matriz asociativa, ¿con una tabla de datos como primer argumento?
Names Default to Here(1);
MET = Open( "$SAMPLE_DATA/Big Class.jmp" );
Factor={"height", "weight"};
Associative Array(MET, Column(Eval List(Factor)))