Déclarer une variable dans une formule de colonneSalut,
Est-ce une bonne pratique de déclarer une variable dans une formule de colonne ? Ou cela crée-t-il des risques d’erreurs ? Ma formule fonctionne bien, mais je crains qu'elle ne soit pas fiable.
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 configuration est la suivante :
- : Le type de mesure est une colonne qui étiquette chaque ligne comme STUDY_CONTROL ou STUDY_VARIABLE.
- :Le groupe de contrôle est une colonne qui utilise une étiquette (juste une lettre) pour associer les lignes qui sont STUDY_VARIABLES à la moyenne appropriée (:Control Means) des lignes STUDY_CONTROL pertinentes.
- :Control group[Row()] n'a pas fonctionné, j'ai donc spécifié la variable rownum à l'avance
Est-ce une solution élégante ou un hack dangereux ?
Comme deuxième question, l'éditeur me prévient qu'il est dangereux d'utiliser Current Data Table() dans une formule : existe-t-il une meilleure alternative ?
Merci beaucoup pour toute aide - c'est ma première question !
David
Re: Déclaration d'une variable dans une formule de colonneBienvenue au club !
:)
Concernant votre question sur « Current Data Table() », voici une capture d'écran du script partagé dans Scripters Club Recording : Création de scripts robustes et sûrs :

Stockez votre table dans une variable et utilisez cette variable dans votre script. Dans l'exemple de capture d'écran, ce serait « dt ».
Re: Déclaration d'une variable dans une formule de colonneEn effet, une merveilleuse conférence sur les scripts JSL !
Cette heure vous épargnera des mois de maux de tête : )
Pour votre problème, veuillez consulter Col Min( ...) .
Il fera tout le travail pour vous :
Pas besoin de déclarer de numéro de ligne - pas besoin d'accéder à la table de données actuelle ni d' obtenir des lignes 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
)
)
)