Suchen / Kopieren eines Werts in eine Zelle in einer anderen ZeileIch habe Probleme, eine gute Lösung für mein spezielles Problem zu finden, auch nach längerer Suche im Forum und in den JMP-Hilfedateien.
Ich habe einen Datensatz mit Patienten, von denen jeder mehrere Phasen einer Studie in aufeinanderfolgenden Zeilen hat (da jeder Patient eine unterschiedliche Anzahl von Phasen hat). Eine der Spalten ist die Phase, und in einer dieser Zeilen für jeden Patienten gibt es eine Phase, die als "Basis" bezeichnet wird. Ich versuche, eine neue Variable zu definieren, um den Yy-Wert von "Base" in derselben Zeile wie die Patientenkennungen zu platzieren. Siehe unten:
Geduldig # Patientenname Phase Yy = Variable von Interesse Neue Spalte = "Basis" [pro Patient]
1 Patient XYZ abc 4 // will 2 hier haben
1 def 8
1 Base 2
1 ghi 10
2 Patient MNO abc 45 // möchte 54 hier
2 def 36
2 ghi 24
2 Base 54
3
3
3
3
Jede Hilfe wird geschätzt!
Vielen Dank,
Drew
Betreff: Suchen / Kopieren eines Wertes in eine Zelle in einer anderen ZeileDafür gibt es mehrere Methoden. @ron_horne Die Methode kann mit Mausklick ausgeführt werden. Das folgende Skript verwendet ein assoziatives Array, das in einer anderen Software als Dictionary oder Lookup bezeichnet wird.
Ich vermisste @ron_horne 's Tisch, also habe ich einen anderen. Hier ist das Skript und im Anhang ist eine Tabelle mit diesem Skript als Tabellenskript eingebettet. Klicken Sie einfach zum Ausführen.
Names default to here(1);
dt = current data table();
brows = dt << get rows where(:Phase == "Base");
aa = Associative Array( Column("Patient #")[brows], Column("Yy = Variable of interest")[brows]);
// patient numbers are the keys and the Base values, the values
nc = dt << New Column("New Column = \!"Base\!" [by patient]", numeric, Continuous);
nc << set each value(If(length(:Patient Name) > 0, aa[Column("Patient #")[]] ) );Betreff: Suchen / Kopieren eines Wertes in eine Zelle in einer anderen ZeileHallo @ drmn43 .
Versuchen Sie das folgende Skript für die angefügte Tabelle.
Andernfalls ist es viel einfacher, es nach den gleichen Schritten manuell auszuführen.
dt = Current Data Table();
dt << select where( :Phase == "Base" );
subdt = dt << Subset( Selected Rows( 1 ) );
dt << clear select;
// make a sleek change of names
subdt << delete columns( "Base by Patient" );
subdt:Name( "Yy = Variable of interest" ) << Set Name( "Base by Patient" );
// Before updating the it is useful to delete columns that we do not want to updat
keep = {"Patient #", "Base by Patient"};
todelete = subdt << get column names( "string" );
For( icol = 1, icol <= N Items( keep ), icol++,
Remove From( todelete, Contains( todelete, Keep[icol] ), 1 )
);
subdt << delete columns( todelete );
dt << Update( With( Data Table( "Subset of Database" ) ), Match Columns( :Patient # = :Patient # ) );
Close( subdt, no save );
Wenn Sie die anderen Zeilen leer benötigen, können Sie einen oder zwei weitere Schritte hinzufügen, um sie auszuführen.
Ron