select where-Anweisung für den Vergleich der SpaltenwerteIch bin nach einer langen Pause und einem eingerosteten Gefühl zu JSL zurückgekehrt.
Ich kann nicht auswählen, wo die Anweisung funktioniert. Ich bin mir sicher, dass es ziemlich einfach ist.
Ich versuche, Zeilen auszuwählen, indem ich einen Wert mit Werten in zwei anderen Spalten vergleiche.
dt << select where( :Col1 > :Col2 & :Col1< :Col3);
Col1 ist (absichtlich) ein Zeichen, weil es weiter verwendet werden muss, und Col2, Col3 sind numerische Spalten.
Was ist falsch?
Ich habe sogar versucht, dies über die GUI zu tun, aber es scheint nicht zu funktionieren.
Vielen Dank
Betreff: Wählen Sie die Where-Anweisung für den Vergleich der Spaltenwerte ausHi @ENTHU ,
Wie von erwähnt @mzwald , die Vergleiche >, < usw. erfordern numerische Werte, um damit arbeiten zu können.
Eine Idee, dies für Ihr :col1 (das nominal ist) zu umgehen, besteht darin, eine numerische Codierung wie 0, 1, 2, 3, 4 für die verschiedenen Zeichenklassen zu verwenden (wenn Sie können) und dann die Spalteneigenschaft " Wertlabels", um die Zeichen in die Labelrolle zu versetzen. Auf diese Weise können Sie die Vergleiche durchführen, aber gleichzeitig, wenn Sie den Spalteninhalt grafisch darstellen oder anzeigen, werden stattdessen die Wertebeschriftungen angezeigt.
Ich habe es mit einer einfachen 3-Spalten-Tabelle und demselben Vergleichscode getestet, den Sie geschrieben haben. Spalte 1 hat die Werte 0-4, Spalte 2 ist Random Normal(0) und Spalte 3 ist Random Uniform(-1,1). In diesem Fall wurde Zeile 6 ausgewählt.
Hoffe das hilft!,
DS

Betreff: Wählen Sie die Where-Anweisung für den Vergleich der Spaltenwerte ausHi @ENTHU ,
Ich sehe ein paar Dinge, die Sie ansprechen müssen. Ich nehme an, Sie versuchen, diese Spalten anhand ihres Vorkommens in der Datentabelle zu referenzieren? Wenn dies der Fall ist, müssen Sie die Syntax anpassen, um den Verweis auf diese Weise zu erstellen (z. B. :Column(#)[] ). Wenn Ihre erste Spalte ein Zeichendatentyp ist, müssen Sie außerdem den Verweis auf diese Spalte in die num()-Funktion einschließen, um die Zeichenfolgen für den Vergleich in einen numerischen Wert umzuwandeln. Hier ist ein Code für den Einstieg:
dt = current data table();
dt << select where( num(:Column(1)[]) > :Column(2)[] & num(:Column(1)[]) < :Column(3)[]);
Ich hoffe das hilft!
@julianisch
Betreff: Wählen Sie die Where-Anweisung für den Vergleich der Spaltenwerte ausFür -Vergleiche müssen alle Spalten numerisch sein.