Bestimmen, ob eine Spalte vorhanden ist<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe ein JMP-Skript, das eine neue Spalte mit einer Formel darin erstellt. Ich versuche herauszufinden, wie ich erkennen kann, ob die Spalte bereits vorhanden ist, sodass ich das Erstellen überspringen und das Generieren zusätzlicher Spalten vermeiden kann. Ich bin mir sicher, dass es da ist, aber ich finde es nicht in der Literatur, die ich habe.
Danke.
Mike
Betreff: Feststellen, ob eine Spalte vorhanden istHier ist eine Version meiner Logik, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird.
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
// Convert all column names to uppercase for case-insensitive search
for (i = 1, i <= nitems(col_name_list), i++,
col_name_list[i] = uppercase(col_name_list[i]);
);
new_column = "BMI";
// English BMI Formula BMI = ( Weight in Pounds / ( Height in inches^2 ) ) x 703
if (!contains(col_name_list, uppercase(new_column)),
dt <<NEW column=""></NEW>Betreff: Feststellen, ob eine Spalte vorhanden istDanke Frau!
Bei mir hat nur Ihr Beispiel funktioniert, da bei der anderen Lösung die Groß-/Kleinschreibung beachtet wird. Ich musste Ihres verwenden, da ich nicht sicher sein konnte, ob die Groß-/Kleinschreibung meiner Zeichenfolgenzeichen korrekt ist.Betreff: Feststellen, ob eine Spalte vorhanden istPMroz,
Lassen Sie mich zunächst bestätigen, dass der von Ihnen geschriebene Code auch bei mir funktioniert hat und dass die von mir geschriebene Erklärung nicht mit dem Verhalten von JMP 9 oder 10 übereinstimmt.
Nachdem ich Ihre Antwort gelesen habe, habe ich in JMP 9 und 10 auch mehrere verschiedene Kombinationen von „Contains“- und „If“-Anweisungen mit Listen, Zeichenfolgen und Zahlen ausprobiert. Obwohl meine Versuche nicht erschöpfend waren, stimmen alle meine Ergebnisse mit Ihren überein. Als ich Ihren ersten Beitrag las, erinnerte ich mich zunächst an einige Fehlerbehebungen, die ich Jahre zuvor durchgeführt hatte und bei denen ich die Verwendung von enthält()>0 übernommen hatte. Ich kann das Szenario nicht nachbilden; Ich habe jedoch die folgenden Informationen im JMP-Skripthandbuch gefunden. Es beschreibt die Verwendung von „Contains“ mit >0, was für ihr Beispiel angemessen sein könnte, gibt jedoch nicht explizit an, dass dies erforderlich ist oder nicht.
Seite 136 des JMP-Skripthandbuchs Version 10:
„Um zu beurteilen, ob ein Element in einer Liste enthalten ist, verwenden Sie Loc() Und Enthält() mit >0 . Ein zurückgegebener Wert von Null
bedeutet, dass das Element nicht in der Liste enthalten ist. Ein zurückgegebener Wert von 1 bedeutet, dass das Element mindestens einmal in der Liste vorhanden ist.
...
„Finden Sie heraus, ob die Nummer 5 existiert in der AnzahlListe:
NRow(Loc(numList, 5)) >0;
0
Enthält(numList, 5) >0;
0"
Hoffe das hilft.
Betreff: Feststellen, ob eine Spalte vorhanden istHallo wiebepo,
Ich habe verschiedene Kombinationen ausprobiert und das Negieren einer positiven Ganzzahl, egal wie groß, führt zu einer 0. Mein Code funktioniert also (in JMP 9 und 10).Allerdings schätze ich den Hinweis – dieser Ansatz funktioniert möglicherweise nicht in allen Sprachen.Es bedarf sicherlich weiterer Tests.
b = 2000000000000;
!b;
Das Protokoll zeigt:
0
Grüße,
PMroz
Betreff: Feststellen, ob eine Spalte vorhanden istAuch praktisch zu wissen. Ich freue mich immer, ein weiteres Tool zur Toolbox hinzufügen zu können.
Danke.
Betreff: Feststellen, ob eine Spalte vorhanden istDas ist sehr praktisch zu wissen. Darauf muss ich achten.
Danke
Betreff: Feststellen, ob eine Spalte vorhanden istEine einzelne Funktion ist mir nicht bekannt. Aber Wird vermisst() in Kombination mit Ist skriptfähig() kann den Trick machen.
Die Spalte muss außerdem von einer Try()-Anweisung eingeschlossen werden, um zu verhindern, dass das Skript stoppt, wenn die Spalte nicht vorhanden wäre.
dt = Open( "$sample_data\Big Class.jmp" );
new_column = "BMI";
If( Is Missing( Is Scriptable( Try( Column( new_column ) ) ) ),
dt << New Column( new_column, numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Betreff: Feststellen, ob eine Spalte vorhanden istIch bin nicht sicher, ob dies in allen neueren Versionen von JMP zutrifft. Ich mache diesen Kommentar nur, um eine Möglichkeit hervorzuheben, die Robustheit des Codes zu verbessern.
„Contains“ gibt die Position des Elements zurück, was gut in einer „if“-Anweisung verwendet werden kann, da Null als falsch und ein positiver Wert als wahr interpretiert wird. Wenn einem „Contains“ ein „nicht!“ vorangestellt wird, funktioniert die Bedingung, wenn das Element nicht vorhanden ist oder wenn es als erstes Element vorhanden ist. Wenn das Element jedoch nicht das erste ist (ein Wert größer als 1), wird das nicht „!“ Die Konvertierung der Bedingung in „falsch“ kann fehlschlagen. Dies kann durch einen Vergleich „>0“ mit „enthält“ vermieden werden. Siehe unten für die Syntax.
dt = Open( "$sample_data\Big Class.jmp" );
col_name_list = dt << get column names( string );
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
If( !(Contains( col_name_list, new_column ) > 0),
dt << New Column( "BMI", numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Betreff: Feststellen, ob eine Spalte vorhanden istDanke, das funktioniert bei mir ganz gut. Ich hatte erwartet, eine Funktion zum Überprüfen der Existenz zu finden, aber das funktioniert.
Betreff: Feststellen, ob eine Spalte vorhanden ist
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
if (!contains(col_name_list, new_column),
dt <<NEW column=""></NEW>