Scansione di una descrizioneCiao a tutti!
Vorrei scrivere una formula per scansionare Colonna, Descrizione, raccogliere varie stringhe di testo e restituire un "SÌ" se uno di essi è presente e "NO" se non presente. Le stringhe di testo di interesse sono solo una parte dei dati nella Colonna, Descrizione. Sono interessato a tutte le forme della stessa cosa, "40 once", "40 once", ecc. Voglio restituire SÌ se qualcuno di questi è presente.
Ho scritto la seguente formula,
If(
N Rows/*###*/(Contains(
{"40 oz" ; "40 ounce" ; "40oz" ; "40 Ounce" ; "40 Oz" ;
"40 OZ"},
Empty()
)) > 0,
"Yes",
"NO"
)
Tuttavia, JMP restituisce NO per tutte le righe, anche quelle dove posso vedere le descrizioni che ho catturato sopra. C'è un modo per usare "LOCATE" che sarebbe meglio per questo?
Grazie!
Ri: Scansione di una descrizioneGrazie!
Ri: Scansione di una descrizioneGrazie. Non ho inserito correttamente il comando o in precedenza.
Ri: Scansione di una descrizione @llawless
Ho usato lo stesso script sulla tua tabella dati e qui ci sono i risultati.

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"))); Ri: Scansione di una descrizioneUn altro modo:
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 )
);Ri: Scansione di una descrizioneCredo di aver ragione nel mio precedente commento. La tua formula deve avere la funzione completa "Contains ()" dopo ogni istruzione "OR". Ho allegato ciò che ho suggerito e sembra fare ciò che vuoi.
Ri: Scansione di una descrizioneApprezzo molto il vostro aiuto!
Ho accecato alcuni dati nel file allegato. Il mio vero set di dati contiene molte più righe e descrizioni più lunghe, ma spero che questo sia sufficiente per darti un'idea.
Ri: Scansione di una descrizione @llawless ,
Leggo e rileggo la tua domanda più volte, forse lo sei dopo.
Questa è essenzialmente la stessa logica di prima - tuttavia, l'ho usata in una formula di colonna. Fammi sapere se questo aiuta.
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"))); Ri: Scansione di una descrizione @llawless ,
Posso aiutarti di più se pubblichi un set di dati di esempio. Dal momento che una volta non è disponibile, permettimi di dimostrare cosa sto facendo attraverso un set di dati di esempio in JMP. Gentilmente, condividi i dati di esempio se questo non risponde alla tua domanda.
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);
Ri: Scansione di una descrizioneSì, l'ho provato e la colonna non ha restituito dati.
Ri: Scansione di una descrizione @llawless ,
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); Questo è stato per risolvere il caso in cui si sta eseguendo la scansione delle righe. Hai provato questo?
Ri: Scansione di una descrizioneHmm, non sto raccogliendo le descrizioni. È il codice che hai fornito solo per la scansione dei nomi delle colonne. Voglio eseguire la scansione di righe sotto una colonna nota.
Ri: Scansione di una descrizionedt = 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); È possibile estrarre i nomi delle colonne utilizzando la funzione Ottieni nomi di colonna e utilizzare il codice fornito
Ri: Scansione di una descrizionePotrei sbagliarmi, ma non hai bisogno di una dichiarazione OR all'interno della funzione contiene? Se ho ragione, l'assenza di OR sta solo cercando l'intera stringa di voci e non trovandole tutte insieme. Ma potrei sbagliarmi.
Ri: Scansione di una descrizioneGrazie!
Quello che intendevo era il nome della colonna Descrizione. All'interno di quella colonna, voglio selezionare le righe che hanno le stringhe di testo di interesse (ad esempio, 40 once).
Ri: Scansione di una descrizione @llawless ,
Ciao, lasciami fare un tentativo. Sto assumendo che i dati siano in righe:
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);
Se questi fossero i nomi delle colonne, potresti semplicemente sostituire il codice precedente e utilizzarlo al suo posto.
ColNames = dt << Get Column Names("String");
Quello che non seguo sulla tua domanda è che i dati sono in "Descrizione colonna" - intendi Nome colonna?
Spero che questo aiuti - altrimenti puoi gentilmente chiarire la tua domanda o fornire dati di esempio.