Hai bisogno di aiuto con lo scripting JSL per dividere i dati della colonna con un delimitatore e abbinarli a un altro delimitatore di colonna? Dividi i datiCiao ragazzi
sto usando JMP17 e ho davvero bisogno di aiuto sullo script JSL per elaborare i dati di input sottostanti nei dati di output desiderati
Tabella dati di input:
| Dati | Etichetta | ID |
|----------|----------|----------|
| 1_1_64_5_2 | D1_DD4_FF1_FIN1_GPES2 | Mela1 |
| 1_1_2 | D2_D3_D4 | Mela1 |
| 1_2_68_5_6 | D1_DD4_FF1_FIN1_GPES2 | Arancione1 |
| 1_2_2 | Italiano: Arancione1 |
| 2_1_50_3_10 | D1_DD4_FF1_FIN1_GPES2 | Uva1 |
| 2_1_2 | Italiano: Uva1 |
Formato di output: (la disposizione della sequenza delle colonne non ha importanza)
| ID| Etichetta| Dati|
|----------|----------|----------|
| Mela1 | D1 | 1 |
| Mela1 | DD4 | 1 |
Italiano:
| Mela1 | FIN1 | 5 |
| Apple1 | GPES2 | 2 |
| Mela1 | D2| 1 |
| Mela1 | D3| 1 |
| Mela1 | Giorno 4 | 2 |
| Arancione1| Giorno 1 | 1 |
| Arancione1| DD4 | 2|
| Arancione1| FF1 | 68|
| Arancione1| FIN1 | 5 |
| Arancione1| GPES2 | 6 |
| Arancione1| D2| 1 |
| Arancione1| Giorno3| 2 |
| Arancione1| Giorno 4 | 2 |
| Uva1 | Giorno 1 | 2 |
| Uva1 | DD4 | 1|
| Uva1 | Italiano: 50|
| Uva1 | FIN1 | 3 |
| Uva1 | GPES2 | 10 |
| Uva1 | D2| 2 |
| Uva1 | Giorno3| 1 |
| Uva1 | Giorno 4 | 2 |
Automazione e scriptingAnalisi e modellazione dei dati di baseAccesso ai datiRe: Ho bisogno di aiuto con lo scripting JSL per dividere i dati della colonna con un delimitatore e abbinarli a un altro delimitatore di colonna. Dividi i datiPuoi fornire una tabella di esempio? È un po' difficile capire la situazione di partenza solo dal testo.
Re: Ho bisogno di aiuto con lo scripting JSL per dividere i dati della colonna con un delimitatore e abbinarli a un altro delimitatore di colonna. Dividi i datiPresumo che tutti i valori di etichetta e dati contengano lo stesso numero di elementi. Se così fosse, funzionerebbe. In caso contrario, sarebbe necessario aggiungere un po' più di logica per verificarlo, ma questo sarebbe un modo rapido per elaborare i dati.
// this would be whatever your input table name is<BR />dt0 = Data table("Input Table");
dt1 = new table("Output table");
dt1<<NEW column=""></NEW>Re: Ho bisogno di aiuto con lo scripting JSL per dividere i dati della colonna con un delimitatore e abbinarli a un altro delimitatore di colonna. Dividi i datiNon sono sicuro di quale sia il punto di partenza, quindi darò per scontato che tu abbia una tabella dati e non un file di testo.

Seleziona la colonna Dati ed Etichetta e usa Testo in Colonne su di esse

Rimuovi le "vecchie" colonne (o spostale alla fine).
Quindi impila i tuoi dati utilizzando più serie di stack

Eliminare le colonne in più, riordinare e rinominare le colonne

Elimina le righe mancanti

Verifica i risultati e utilizza lo script che JMP ha creato per te (o il flusso di lavoro).
È inoltre allegato un flusso di lavoro (potrebbe richiedere un po' di pulizia) e uno script pulito in base al flusso di lavoro riportato di seguito (può essere reso molto più robusto in base alle proprie esigenze):
Vedi altro...
Names Default To Here(1);
dt = Current Data Table();
dt << Text to Columns(columns(:" Data"n, :Label), Delimiters("_"));
dt << Delete Columns(:" Data"n, :Label);
dt_stacked = dt << Stack(
columns(:Data 1, :Data 2, :Data 3, :Data 4, :Data 5, :Label 1, :Label 2, :Label 3, :Label 4, :Label 5),
Number of Series(2),
Contiguous,
Output Table("Stacked result")
);
dt_stacked << Delete Columns(:Label, :Label 2);
Column(dt_stacked, "Data 2") << Set Name("Label");
dt_stacked << Move Selected Columns({:Label}, after(:ID));
dt_stacked << Select Where(:Label == "") << Delete Rows;
Re: Ho bisogno di aiuto con lo scripting JSL per dividere i dati della colonna con un delimitatore e abbinarli a un altro delimitatore di colonna. Dividi i datiAlcuni miglioramenti che suggerirei:
- In genere non usare Current Data Table(). In questo caso potresti potenzialmente scegliere la tabella iniziale usandola ma non dovresti aver bisogno di continuare a cambiarla perché hai già i riferimenti (ad esempio current data table(dt1); non è necessario e potrebbe causare problemi)
- Esegui un ciclo su una tabella specifica quando utilizzi For Each Row e non basarti sulla tabella corrente (for each row(dt0,...)
- Puoi anche usare For Each + Across per fare un loop su più contenitori. Puoi anche forzare comportamenti diversi quando usi Across per gestire contenitori di lunghezza diversa
- Se conosci i nomi delle colonne + i valori, puoi aggiungere valori già con << Aggiungi righe ma può essere un pasticcio (di solito aggiungo righe come hai fatto tu e aggiungo i valori dopo)
Vedi altro...
Names Default To Here(1);
dt_input = Current Data Table();
// dt_input = Data table("Input Table");
dt_result = New Table("Output table");
dt_result << New Column("ID", Character, Nominal);
dt_result << New column("Label", Character, Nominal);
dt_result << New Column("Data", Character, Nominal);
For Each Row(dt_input,
id_val = Column(dt_input, "ID")[];
data_vals = Words(Column(dt_input, "Data")[], "_");
label_vals = Words(Column(dt_input, "Label")[], "_");
For Each({{cur_label, cur_data}}, Across(label_vals, data_vals),
dt_result << Add Rows({ID = id_val, Label = cur_label, Data = cur_data});
);
);