Beschreibung scannenHallo allerseits!
Ich möchte eine Formel zum Scannen von Spalte, Beschreibung, zum Aufnehmen verschiedener Textzeichenfolgen schreiben und ein "JA" zurückgeben, wenn eine von ihnen vorhanden ist, und "NEIN", falls nicht vorhanden. Die interessierenden Textzeichenfolgen sind nur ein Teil der Daten in der Spalte Beschreibung. Ich interessiere mich für alle Formen der gleichen Sache, "40 Unzen", "40 Unzen" usw. Ich möchte JA zurückgeben, wenn einer von diesen vorhanden ist.
Ich habe die folgende Formel geschrieben:
If(
N Rows/*###*/(Contains(
{"40 oz" ; "40 ounce" ; "40oz" ; "40 Ounce" ; "40 Oz" ;
"40 OZ"},
Empty()
)) > 0,
"Yes",
"NO"
)
JMP gibt jedoch NEIN für alle Zeilen zurück, selbst wenn ich die oben erfassten Beschreibungen sehen kann. Gibt es eine Möglichkeit, "LOCATE" zu verwenden, die dafür besser wäre?
Vielen Dank!
Re: Eine Beschreibung scannenVielen Dank!
Re: Eine Beschreibung scannenVielen Dank. Ich habe den Befehl oder vorher nicht richtig eingegeben.
Re: Eine Beschreibung scannen @loslos
Ich habe das gleiche Skript für Ihre Datentabelle verwendet und hier sind die Ergebnisse.

dt = Current Data Table(); // Keep your data table open.
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :Description ), "oz" ) ) | !Is Missing( Regex( Char( :Description ), "ounce" ) ),:Description,"No Match"))); Re: Eine Beschreibung scannenEin anderer Weg:
New Column( "40 oz",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( N Items( Regex Match( :Description, "40.*[oO]([zZ]|unce)" ) ) > 1 ),
Value Labels( {0 = "No", 1 = "Yes"} ),
Use Value Labels( 1 ),
Set Display Width( 57 )
);Re: Eine Beschreibung scannenIch glaube, dass ich in meinem früheren Kommentar richtig lag. Ihre Formel muss nach jeder "ODER" -Anweisung die vollständige Funktion "Enthält ()" haben. Ich habe angehängt, was ich vorgeschlagen habe und es scheint zu tun, was Sie wollen.
Re: Eine Beschreibung scannenIch schätze deine Hilfe sehr!
Ich habe einige Daten in der angehängten Datei geblendet. Mein echter Datensatz enthält viel mehr Zeilen und längere Beschreibungen, aber ich hoffe, das reicht aus, um Ihnen eine Idee zu geben.
Re: Eine Beschreibung scannen @loslos .
Ich habe Ihre Frage mehrmals gelesen und noch einmal gelesen. Vielleicht haben Sie danach gesucht.
Dies ist im Wesentlichen die gleiche Logik wie zuvor - ich habe sie jedoch in einer Spaltenformel verwendet. Lassen Sie mich wissen, ob das hilft.
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :name ), "AL" ) ) | !Is Missing( Regex( Char( :name ), "MA" ) ),:name,"No Match"))); Re: Eine Beschreibung scannen @loslos .
Ich kann Ihnen mehr helfen, wenn Sie einen Beispieldatensatz veröffentlichen. Da einmal nicht verfügbar ist, lassen Sie mich anhand eines Beispieldatensatzes in JMP zeigen, was ich mache. Teilen Sie bitte die Beispieldaten mit, wenn Ihre Frage dadurch nicht beantwortet wird.
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
NamesList = dt:name << get Values;
for(i = 1 , i <= N Items(NamesList), i++,
If(!IsMissing(Regex(Char(NamesList[i]),"AL"))|!IsMissing(Regex(Char(NamesList[i]),"MA")),
Insert Into(DesNames,NamesList[i]);
);
);
Show(DesNames);
Re: Eine Beschreibung scannenJa, ich habe es versucht, und die Spalte gab keine Daten zurück.
Re: Eine Beschreibung scannen @loslos .
dt = Current Data Table();
Col = Column(dt,1); // Replace 1 with the column number of your data table with the data of interest
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList); Dies war der Fall, in dem Sie Zeilen scannen. Hast du das probiert?
Re: Eine Beschreibung scannenHmm, ich greife die Beschreibungen nicht auf. Ist der Code, den Sie nur zum Scannen von Spaltennamen angegeben haben. Ich möchte Zeilen unter einer bekannten Spalte scannen.
Re: Eine Beschreibung scannendt = Current Data Table();
ColNames = dt << Get Column Names("string");
DesList = List();
for(i = 1 , i <= N Items(ColNames ), i++,
If(!IsMissing(Regex(Char(ColNames [i]),"oz")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"Oz")),
Insert Into(DesList,ColNames [i]);
);
);
Show(DesList); Sie können die Spaltennamen mit der Funktion "Spaltennamen abrufen" extrahieren und den von mir bereitgestellten Code verwenden
Re: Eine Beschreibung scannenIch könnte falsch sein, aber brauchen Sie keine ODER-Anweisung in der include-Funktion? Wenn ich Recht habe, dann sucht das Fehlen von ODER nur nach dieser ganzen Reihe von Einträgen und findet nicht alle auf einmal. Aber ich könnte falsch liegen.
Re: Eine Beschreibung scannenVielen Dank!
Was ich damit meinte, war der Spaltenname Beschreibung. In dieser Spalte möchte ich Zeilen auswählen, die die interessierenden Textzeichenfolgen enthalten (z. B. 40 oz).
Re: Eine Beschreibung scannen @loslos .
Hallo, lass mich das mal versuchen. Ich gehe davon aus, dass die Daten in Zeilen sind:
dt = Current Data Table();
Col = Column(dt,1);
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList);
Wenn es sich um Spaltennamen handelt, können Sie sie einfach im obigen Code ersetzen und stattdessen verwenden.
ColNames = dt << Get Column Names("String");
Was ich bei Ihrer Frage nicht verfolge, ist, dass die Daten in "Spaltenbeschreibung" stehen - meinen Sie Spaltenname?
Hoffe, das hilft - sonst können Sie bitte Ihre Frage klären oder Beispieldaten bereitstellen.