Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesHola, estoy intentando crear y completar un grupo de columnas nuevas en función de los resultados de una declaración si/entonces.
PASO 1:
Necesito crear las nuevas columnas vacías que se completarán.(55 en total)
(Cada nueva columna es un campo numérico continuo).
El nombre de cada columna corresponderá al nombre de cada uno de los 55 compuestos del grupo seguido de "_ppt".Por ejemplo, el compuesto denominado "4:2 FTS" da como resultado una nueva columna denominada [4:2 FTS_ppt].
PASO 2:
Fila por fila, rellenaría las nuevas columnas usando una declaración si/entonces que evalúa tres columnas existentes asociadas con cada uno de los 55 compuestos del grupo.Específicamente,
si [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] ENTONCES [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
si [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N Y [RL_4:2 FTS] <= 3 ENTONCES [4:2 FTS_ppt] = 0.0009.
si [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N Y [RL_4:2 FTS] > 3 ENTONCES [4:2 FTS_ppt] = NULL.
Aquí están los nombres de columnas existentes con un sufijo que es el nombre compuesto.Estoy usando JMP Pro 17.0.



¡Cualquier orientación sería muy apreciada!
Automatización y secuencias de comandosOrganización de contenidosRe: Necesito completar una nueva columna basada en los resultados de una declaración si/entonces- El propósito de la comunidad de discusión no es ser una fuente para que los usuarios de JMP obtengan scripts escritos cuando lo soliciten.Está ahí para ayudar a los usuarios a aprender JMP.
- Dado el pseudocódigo que proporcionó, está claro que debe tomarse el tiempo para leer la Guía de secuencias de comandos JMP.Está disponible en la Biblioteca de documentación de JMP en el menú desplegable Ayuda de JMP.
- A continuación se muestra un intento de ayudarle con su problema.No está probado, ya que no tengo ninguno de tus datos.Tómese el tiempo para estudiar y aprender el código.Las funciones están bien documentadas en el Scripting Index y en la JSL Scripting Reference.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesGracias Jim.Sí, punto bien tomado.Necesito dedicar más tiempo a los fundamentos de jsl antes de comenzar a trabajar.
El código anterior creó todas las columnas correctamente, pero la fórmula solo produce valores nulos ("".").No he podido solucionar el error pero seguiré intentándolo.Gracias de nuevo.
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesLe echaré un vistazo si me puede proporcionar algunos datos de muestra.
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesGracias Jim.Adjunté la tabla jmp a continuación que contiene un pequeño subconjunto de filas de mi conjunto de datos.
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesEra necesario cambiar dos cosas.
- El valor de la variable x que se utiliza en la fórmula debe inicializarse para la ejecución de cada fila.
- Es necesario desactivar la ejecución de la fórmula.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entoncesGracias Jim.Tenía la intención de regresar poco después de su respuesta, pero he estado intentando duplicar el código.Por alguna razón no he conseguido que funcione.Utilicé el depurador y recibí este mensaje:

Sólo quería que supieras que recibí tu opinión. Seguiré intentándolo.Gracias.
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entonces
Re: Necesito completar una nueva columna basada en los resultados de una declaración si/entonces¡Sí!Acabo de hacerlo funcionar.¡Gracias de nuevo por tu ayuda en esto!