Deklarieren einer Variablen innerhalb einer SpaltenformelHallo,
Ist es sinnvoll, eine Variable innerhalb einer Spaltenformel zu deklarieren? Oder besteht dadurch die Gefahr von Fehlern? Meine Formel funktioniert gut, aber ich befürchte, dass sie unzuverlässig sein könnte.
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
);
Der Aufbau ist wie folgt:
- :Der Messtyp ist eine Spalte, die jede Zeile entweder als STUDY_CONTROL oder STUDY_VARIABLE beschriftet.
- :Kontrollgruppe ist eine Spalte, die eine Bezeichnung (nur einen Buchstaben) verwendet, um Zeilen, die STUDY_VARIABLES sind, mit dem entsprechenden Mittelwert (:Kontrollmittelwert) der relevanten STUDY_CONTROL-Zeilen zu verknüpfen
- :Control group[Row()] hat nicht funktioniert, also habe ich die Variable rownum vorne angegeben
Handelt es sich hierbei um eine elegante Lösung oder einen gefährlichen Hack?
Als zweite Frage warnt mich der Herausgeber, dass es gefährlich ist, Current Data Table() in einer Formel zu verwenden – gibt es eine bessere Alternative?
Vielen Dank für jede Hilfe – dies ist meine erste Frage!
David
Betreff: Deklarieren einer Variablen innerhalb einer SpaltenformelWillkommen im Club!
:)
Bezüglich Ihrer Frage zu „Current Data Table()“ hier ein Screenshot des freigegebenen Skripts in der Scripters Club-Aufzeichnung: Erstellen robuster und ausfallsicherer Skripts:

Speichern Sie Ihre Tabelle in einer Variable und verwenden Sie diese Variable in Ihrem Skript. Im Screenshot-Beispiel wäre das „dt“.
Betreff: Deklarieren einer Variablen innerhalb einer SpaltenformelWirklich eine wunderbare Vorlesung über JSL-Skripting!
Diese Stunde erspart Ihnen monatelange Kopfschmerzen : )
Schauen Sie sich für Ihr Problem bitte Col Min( ...) an.
Es erledigt die gesamte Arbeit für Sie:
Es ist nicht nötig, eine Zeilennummer zu deklarieren - es ist weder ein Zugriff auf die aktuelle Datentabelle noch das Abrufen von Zeilen erforderlich, wobei ()
: )

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
)
)
)