Dichiarare una variabile all'interno di una formula di colonnaCIAO,
È buona norma dichiarare una variabile all'interno di una formula di colonna? Oppure questo crea rischi di errori? La mia formula funziona bene, ma temo che possa essere inaffidabile.
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 configurazione è la seguente:
- :Il tipo di misurazione è una colonna che etichetta ciascuna riga come STUDY_CONTROL o STUDY_VARIABLE
- :Il gruppo di controllo è una colonna che utilizza un'etichetta (solo una lettera) per associare le righe che sono STUDY_VARIABLES con la media appropriata (:Control significa) delle relative righe STUDY_CONTROL
- :Control group[Row()] non ha funzionato, quindi ho specificato la variabile rownum in anticipo
È una soluzione elegante o un trucco pericoloso?
Come seconda domanda, l'editor mi avverte che è pericoloso utilizzare Current Data Table() in una formula: esiste un'alternativa migliore?
Molte grazie per l'eventuale assistenza: questa è la mia prima domanda!
Davide
Re: Dichiarazione di una variabile all'interno di una formula di colonnaBenvenuti nel club!
:)
Per quanto riguarda la tua domanda su 'Current Data Table()', ecco uno screenshot dallo script condiviso nella registrazione di Scripters Club: Creazione di script robusti e a prova di errore:

Memorizza la tua tabella in una variabile e usa quella variabile nel tuo script. Nell'esempio dello screenshot, sarebbe 'dt'.
Re: Dichiarazione di una variabile all'interno di una formula di colonnaDavvero una lezione meravigliosa sullo scripting JSL!
Questa ora ti farà risparmiare mesi di mal di testa : )
Per il tuo problema, dai un'occhiata a Col Min( ...) .
Farà tutto il lavoro per te:
Non c'è bisogno di dichiarare alcun rownum - non c'è bisogno di accedere alla tabella dati corrente né di ottenere righe 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
)
)
)