Estrai tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaCIAO! Ho dati da SharePoint che utilizziamo (tra le altre cose) per tenere traccia di quali strumenti/tecniche sono stati/sono stati utilizzati per risolvere un problema. Ciò include JMP, a proposito.I dati (in una colonna) seguono questo tipo di formattazione delimitata da ;:
;#;;#;;#...
3.4 Strumenti di ottimizzazione e simulazione offline;#15;#3.9 Simulazione;#30;#4.6 Bilancio dei materiali;#22
Ogni riga della tabella (problema risolto) può avere uno o più . A volte la inizia con #, a volte no. Ma è sempre preceduto da #.
Vorrei analizzare la stringa per e il formato per l'analisi a risposta multipla: 15, 30, 22 (esempio sopra).
- Sono presenti ~100 , quindi la creazione di ~100 colonne sparse sembra uno spreco.L'approccio utilizzato nel file di dati di esempio Failures3Delimited.jmp è il modo più efficiente per affrontare questo problema?
- Ho iniziato a imparare REGEX e sono riuscito a trovare un'occorrenza di , ma non tutte. Ho bisogno di un ciclo? Un altro modo per farlo?
Grazie. Utilizzando JMP17.1 Pro.
Automazione e scriptingCombinazione e pulizia dei datiRi: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaEcco una potenziale soluzione che ho trovato:

Ecco la formula che ho usato
i = 1;
string = "";
While( Word( i, :Input, "#;" ) != "",
theWord = Word( i, :Input, "#;" );
If( Is Missing( Num( theWord ) ) == 0,
string = string || "," || theWord
);
i++;
);
Try( Substr( string, 2 ) );
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaMolto elegante - invece di una complicata suddivisione primo-secondo (due volte lo stesso delimitatore) o di quale parte sia il TESTO, semplicemente:
trova i NUMERI 
Speriamo che non ci sia l'ID n. 30-2...
o una descrizione: 42
New Column( "IDs",
Character,
"Multiple Response",
Formula(
Concat Items(
Transform Each( {theWord}, Words( :Input, ";#" ),
Char( Num( theWord ) )
),
""
)
),
Set Property( "Multiple Response", Multiple Response( Separator( "." ) ) ),
)
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaNon suggerirò l'uso Il modello di carattere di JMP poiché è abbastanza difficile da capire (almeno tutte le diverse funzionalità) ma sono riuscito (forse) a farlo utilizzandolo
Names Default To Here(1);
str = "3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22";
idlist2 = {};
resval = "";
Pat Match(str, Pat Span("#") + Pat Regex("\d+?") >> next_id + Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id); resval = Concat Items(idlist2, ", "))
);
show(idlist2, resval);
ecco un esempio che lo utilizza nella formula
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(1),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values(
{
"3.4 Offline Optimization & Simulation Tools;#15;#3.9 Simulation;#30;#4.6 Material Balance;#22"
}
)
),
New Column("Column 2",
Character,
"Multiple Response",
Formula(
idlist2 = {};
resval = "";
Pat Match(
:Column 1,
Pat Span("#") + Pat Immediate(Pat Regex("\d+?"), next_id)
+Pat Regex("(;|$)") + Pat Test(
Insert Into(idlist2, next_id);
resval = Concat Items(idlist2, ", ");
)
);
resval;
),
Set Property("Multiple Response", Multiple Response(Separator(",")))
)
)Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaGrazie, Jim! Stavo pensando che una sorta di ciclo avrebbe funzionato, con o senza REGEX. Spero che tu stia bene!
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaJarmo: Grazie per il tuo impegno! Ho letto le sezioni REGEX e Pat Match nello Scripting Manual e ho deciso di non provare Pat Match a meno che non sia assolutamente necessario...
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplahogi: Grazie per entrambi i vostri contributi! Avevo già usato Words(), ma non ci avevo pensato perché all'inizio mi ero convinto che avrei dovuto perseguire una soluzione REGEX. Questa soluzione è molto elegante! Ho bisogno di documentarmi su Concat Items()...
Jim/Jarmo/hogi: hai mostrato il potere globale della comunità! Ora mi trovo a Kuala Lumpur. Ho postato questa cosa per prima cosa la mattina in cui probabilmente stavi per dormire/stavi già dormendo. Ho ricevuto una soluzione da te nel tardo pomeriggio. Grazie ancora!
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multipla@hogi ha scritto:
...complicato frazionamento primo-secondo...
in realtà - meno complicato di quanto pensassi 
New Column( "IDs",
Character,
"Multiple Response",
Formula(
splitItems = Words( :Input, ";#" );
Concat Items( splitItems[2:: N Items( splitItems ):: 2], "," );
)
)
...e una delle prossime versioni di Jmp renderà il tutto ancora più semplice:
https://community.jmp.com/t5/JMP-Wish-List/new-slicing-options-for-matrices/idc-p/614326/highlight/true#M4057
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multiplaLa modifica necessaria è l'attuale delimitatore che JMP riconosce come risposte multiple. Anche in questo caso funzionerebbe bene la funzione Sostituto.
Ri: Estrarre tutti gli elementi desiderati da una stringa per abilitare l'analisi a risposta multipla?