Hallo,
Ich möchte etwas erreichen, das meiner Meinung nach sehr einfach ist: Tabellen basierend auf Datumsangaben zusammenführen.
Nehmen wir an, ich habe die folgenden Tabellen:
Tabelle1 – mit den folgenden Spalten: Gruppe1, Ereignisdatum.
Tabelle2 – mit den folgenden Spalten: Gruppe2, Startdatum, Enddatum.
Ich möchte, dass der Join wie folgt funktioniert: (Gruppe1 == Gruppe2) UND (Startdatum < Datum < Enddatum)
Wie kann ich dies mithilfe eines JSL-Codes erreichen?
Danke
Perfekt! Ich wusste nicht, dass Sie in JMP mit SQL-Syntax arbeiten können. Das wird mein Leben von nun an viel einfacher machen.
Danke
Ich denke, es wird am einfachsten sein, dies abzufragen und etwas SQL für den Join zu schreiben
Names Default To Here(1);
// Using aliases, performing a join
dtSAT = Open("$SAMPLE_DATA/SATByYear.jmp", Invisible);
dtUS = Open("$SAMPLE_DATA/US Demographics.jmp", Invisible);
Query(
Table(dtSAT, "t1"),
Table(dtUS, "t2"),
"\[SELECT t1.State, t1."SAT Math", t2."College Degrees",
t2."Eighth Grade Math"
FROM t1
LEFT OUTER JOIN t2
ON t1.State = t2.State
WHERE t1.'SAT Math' > 550;
]\"
);
Es ist nicht die einzige Option, aber sie sollte ziemlich einfach und leicht zu verstehen sein (wenn Sie SQL beherrschen).
Bearbeiten:
Abhängig von der Größe Ihrer Tabelle können Sie auch einen Left-Join (oder einen Full-Join) durchführen und dann Werte entfernen, die die Datumsprüfung nicht bestehen:
Names Default To Here(1);
dt1 = New Table("Untitled",
Add Rows(6),
New Column("Column 1", Character, "Nominal", Set Values({"a", "a", "a", "b", "b", "b"})),
New Column("date", Numeric, "Continuous", Format("Best", 12), Set Values([2, 3, 4, 2, 3, 5]))
);
dt2 = New Table("Untitled 2",
Add Rows(2),
New Column("Column 1", Character, "Nominal", Set Values({"a", "b"})),
New Column("start", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1])),
New Column("end", Numeric, "Continuous", Format("Best", 12), Set Selected, Set Values([3, 6]))
);
dt3 = dt1 << Join(
With(dt2),
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(0, 0),
Include Nonmatches(1, 0),
Preserve main table order(1)
);
dt3 << New Column("OK", Numeric, Nominal, << Set Each Value(:start < :date < :end));
dt3 << Select Where(:OK == 0);// << Delete Rows;