Declarar una variable dentro de una fórmula de columnaHola,
¿Es una buena práctica declarar una variable dentro de una fórmula de columna? ¿O esto crea riesgo de errores? Mi fórmula funciona bien, pero me preocupa que no sea confiable.
rownum = Row();
If( :Measurement type == "STUDY_VARIABLE",
:Control means[Min(
Current Data Table() << get rows where( :Measurement type == "STUDY_CONTROL" & :Control group == :Control group[rownum] )
)],
:Control means
);
La configuración es la siguiente:
- :El tipo de medida es una columna que etiqueta cada fila como STUDY_CONTROL o STUDY_VARIABLE
- :El grupo de control es una columna que utiliza una etiqueta (solo una letra) para asociar filas que son STUDY_VARIABLES con la media apropiada (:Medias de control) de las filas STUDY_CONTROL relevantes.
- :El grupo de control[Row()] no funcionó, así que especifiqué la variable rownum al principio
¿Es esta una solución elegante o un truco peligroso?
Como segunda pregunta, el editor me advierte que es peligroso utilizar la Tabla de datos actuales() en una fórmula: ¿existe una alternativa mejor?
Muchas gracias por cualquier ayuda. ¡Esta es mi primera pregunta!
David
Re: Declarar una variable dentro de una fórmula de columna¡Bienvenido al club!
:)
Con respecto a su pregunta sobre 'Tabla de datos actual()', aquí hay una captura de pantalla del script compartido en Scripters Club Recording: Building Robust and fail-safe scripts:

Almacene su tabla en una variable y use esa variable en su secuencia de comandos. En el ejemplo de captura de pantalla, sería "dt".
Re: Declarar una variable dentro de una fórmula de columna¡Realmente una maravillosa conferencia sobre scripts JSL!
Esta hora te ahorrará meses de dolor de cabeza 
Para su problema, por favor eche un vistazo a Col Min (...) .
Hará todo el trabajo por usted:
No es necesario declarar ningún rownum: no es necesario acceder a la tabla de datos actual ni obtener filas where()
: )

Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "Measurement type",
Character,
Formula(
Map Value(
:sex,
{"F", "STUDY_VARIABLE", "M", "STUDY_CONTROL"}
)
)
);
:weight << Set Name( "Control means" );
:age << Set Name( "Control_Group" );
// ^^^^^^^^prepare table
// vvvvvvvv how to use Col Min()
New Column( "myCol",
Formula(
If( :Measurement type == "STUDY_VARIABLE",
Col Minimum(
If( :Measurement type == "STUDY_CONTROL",
:Control means,
Empty()
),
:Control_Group
),
:Control means
)
)
)