Isolieren des kleinsten Datumsunterschiedsich habe einen großen Datensatz mit einem statischen Datum für ein Subjekt (Datum des CT-Scans der Brust) und ich muss den kleinsten Datumsunterschied finden und diese Zeile behalten (die anderen löschen). jmp 16.2.0
Beispiel unten – ich möchte die Zeilen 2 und 4 behalten (den kleinsten Tagesunterschied für Subjekt 1 und 2).
Subjekt-ID. CT-Datum. Lungenfunktionsdatum. Tagesdifferenz
1 30.08.18 29.01.18 -213
1 30.08.18 31.08.18 1
1 30.08.18 04.03.19 186
2 19.12.17 13.11.18 329
2 19.12.17 3.9.19 623
2 19.12.17 4.10.21 1385
InhaltsorganisationBetreff: Isolieren des kleinsten DatumsunterschiedsHallo @jsolo01 ,
Wie wäre es, eine neue Formelspalte „Spaltenrang“ hinzuzufügen, um die Tagesdifferenz nach der Subjekt-ID zu ordnen?
Dann können Sie die Zeile „Col Rank“ ungleich 0 auswählen und die Zeilen löschen.
Für;
Betreff-ID 1, der minimale Tagesunterschied ist die 2. Zeile.
Betreff-ID 2, der minimale Tagesunterschied ist die vierte Zeile
1) Neue Formelspalte erstellen: Col Rank


2) Gehen Sie zu Zeilen > Zeilenauswahl > Wählen Sie aus, wo

3) Definieren Sie die Bedingung: Col Ran ist ungleich 1 > klicken Sie auf „Bedingung hinzufügen“


4) Klicken Sie mit der rechten Maustaste auf die ausgewählten Zeilen > Zeilen löschen

5) Endergebnis wie unten

Ich hoffe es hilft.
Wenn es sich um eine sich wiederholende Analyse handelt, können Sie die Schritte durch Workflow oder JSL automatisieren
Betreff: Isolieren des kleinsten DatumsunterschiedsHier ist meine Ansicht zu einem einfachen Weg, um das zu bekommen, wonach Sie suchen: Nur ein einfaches Skript
Names Default To Here( 1 );
dt = Current Data Table();
dt << select where( :day difference == Col Min( :day difference, :subject ID ) );
dt << subset( selected columns( 0 ), selected rows( 1 ) );
Betreff: Isolieren des kleinsten DatumsunterschiedsUm die interaktive Lösung von @WebDesignesCrow ein wenig zu erweitern:
Wenn Sie die Differenzspalte noch nicht haben, können Sie sie interaktiv erstellen (wählen Sie beide Daten aus, klicken Sie mit der rechten Maustaste auf die Spaltenüberschrift und suchen Sie nach Differenz (umgekehrte Reihenfolge). Dadurch wird eine neue Spalte erstellt, in der die Differenzen in Sekunden angegeben sind. Wenn Sie sie in Ihren/Tagen sehen möchten, können Sie auf die erstellte Spalte doppelklicken und sie nach Bedarf ändern (z. B. eine Division durch In Tagen(1) hinzufügen), aber in diesem Fall funktioniert Sekunden

Klicken Sie dann mit der rechten Maustaste auf die Überschrift dieser neuen Spalte und erstellen Sie daraus eine Spalte mit absoluten Werten.

Nachdem Sie diese Spalte haben, klicken Sie mit der rechten Maustaste auf die Spalte „Subjectid“ und machen Sie sie zur Gruppierungsspalte

Als nächstes können Sie mit der rechten Maustaste auf die Spalte mit den Datumsunterschieden klicken und eine Rangformel erstellen (beachten Sie die Gruppierung).

Klicken Sie in der letzten Spalte mit der rechten Maustaste auf eine der Einsen und wählen Sie die entsprechenden Zellen aus

Von hier aus können Sie entweder eine Teilmenge mit ausgewählten Zeilen erstellen

ODER Rechtsklick auf die Zeilenliste, Auswahl umkehren und nach Umkehrung Zeilen löschen



Wenn Sie dies dann wiederholen müssen, können Sie entweder einen Workflow erstellen oder das Skript aus dem erweiterten Protokoll erfassen
Unten sehen Sie ein vom Workflow Builder erstelltes Skript. Das Einzige, was fehlt, ist das Öffnen der Tabelle, da ich die Tabelle nicht gespeichert habe (und einige Spaltennamen aus demselben Grund falsch sind), also habe ich ein Skript zur Tabellenerstellung hinzugefügt (der Workflow ist ebenfalls angehängt).
Mehr sehen...
Names Default To Here(1);
//Custom Action - Create table 'Untitled 2'
dt = New Table("Untitled 2",
Add Rows(6),
Compress File When Saved(1),
New Column("subj", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 2, 2, 2])),
New Column("day1",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3618432000, 3618432000, 3618432000, 3596486400, 3596486400, 3596486400])
),
New Column("day2",
Numeric,
"Continuous",
Format("m/d/y", 12),
Input Format("m/d/y"),
Set Values([3600028800, 3618518400, 3634502400, 3624912000, 3650313600, 3716150400])
)
);;
//New formula column: day2-day1
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Combine"), "Difference (reverse order)"),
Columns(:day1, :day2)
);
//New formula column: Abs[day2-day1]
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Transform"), "Absolute Value"),
Columns(:"day2-day1"n)
);
//New formula column: Rank[Abs[day2-day1]][subj]
Data Table("Untitled 2") << New Formula Column(
Operation(Category("Distributional"), "Rank"),
Columns(:"Abs[day2-day1]"n),
Group By(:subj)
);
//Select matching cells
Data Table("Untitled 2") << Select Where(:"Rank[Abs[day2-day1]][subj]"n == 1);
//Subset data table
Data Table("Untitled 2") << Select Where(:"Rank[Abs[day2-day1]][subj]"n == 1) <<
Subset(Selected Rows(1), Selected columns only(0));