Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaCiao a tutti, ho 2 tabelle di dati. La mia tabella di dataset "Dataset.jmp" aveva i dati della colonna come codice "ENICITY" e "ETHCAT" che devo collegare con il dataset "Dictionary.jmp" che può cambiare il codice in etichette (nella colonna Etichette del file Dizionario). Il mio dataset effettivo aveva 50 categorie, quindi non posso usare la funzione "Etichette valore" di tutte le categorie. Qualche idea per collegare la riga di una tabella alla colonna di un'altra tabella con il valore esatto? La colonna che voglio è la colonna risultato sul file Dataset.jmp
Ho allegato i file qui.
Grazie mille!
Migliore,
Analisi e modellazione dei dati di baseRe: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaCon match f è sufficiente elencare le colonne in cui si è verificata una modifica; le colonne rimanenti mantengono 'col', ovvero ultima voce.
Se non si desidera avviare una mappatura, utilizzare semplicemente nomi corrispondenti per le colonne e il dizionario.
In alternativa, usa una mappatura coerente (come: primo carattere del nome della colonna. O i primi 2 caratteri) e un'equazione corrispondente.
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaGrazie Hogi, puoi comunque fornirmi lo script che non richiede di ridigitare tutte le colonne che abbiamo (più di 50 colonne)?
Grazie !
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaCome ulteriore alternativa, senza alcun sottoinsieme/For Each:
names default to here(1);
dict = Open( "$DOWNLOADS/Dictionary1.jmp" );
dt = Open( "$DOWNLOADS/Dataset1.jmp" );
// stack the data for easy application of the dictionary
dt2=dt << Stack(
columns(
:ETHNICITY, :ETHCAT, :SEX, :NAME, :"A09:05"n, :"A01:01"n, :DPA05, :DPB04
),
Source Label Column( "col" ),
Stacked Data Column( "values" )
);
// add a column with the corrected column-identifiers
dt 2 << New Column( "column",
Character,
Formula(
Match( :col,
"A01:01", "A",
"A09:05", "A",
"DPA05", "DP",
"DPB04", "DP",
:col
)
)
);
<BR />// add the labels from the disctionary
dt2 <<
Update(
With( dict ),
Match Columns( :column = :Column, :values = :Values ),
Add Columns from Update Table( :Labels )
);<BR />
// convert back to a wide table
dt2 <<
Split(
Split By( :col ),
Split( :Labels ),
Group( :ID ),
Remaining Columns( Drop All )
);
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaIn questo caso, basta aggiungere una mappatura per ottenere il sottoinsieme corretto, ad esempio nel codice Jarmos:
colMapping = Associative array({{"SEX","SEX"},{"NAME","NAME"},{"A09:05","A"},{"A01:01","A"},{"DPA05","DP"},{"DPB04","DP"}});
colIndex= colMapping[col];
dt_dict_subset = dt_dict << Subset(Rows(dt_dict << get rows where(:Column == colIndex)), Selected Columns(0), Invisible);
Idea alternativa: c'è una funzionalità in Recode che si avvicina molto a ciò che desideri: applica il mapping dalla tabella


Al momento non ha un'impostazione per specificare il sottoinsieme corretto. Quindi, se applichi regolarmente tali mappature (e lo fanno anche altri utenti), potresti voler postare un desiderio nella Lista dei desideri per migliorare la funzione con tale impostazione...
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaGrazie, Jim e Jarmo,
Imparo molto dalla comunità di discussione. Grazie per il tuo aiuto, ho provato a trovare argomenti correlati alla cosa che voglio fare e ho ottenuto le risposte da questa comunità. Gli script che JIM e tu mi hai dato funzionano. Tuttavia, i miei dati reali sono più complicati degli esempi. Ad esempio, se uso lo stesso dizionario con più colonne nel set di dati, come ho allegato il nuovo set di dati1 e dizionario1. Puoi correggere lo script per questo, se 1 colonna è condivisa con altre colonne nello stesso schema? Come Dizionario A e Colonne A01, A08, A9,...
Ho allegato qui il nuovo set di dati.
Migliore,
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaInizierei sicuramente con la soluzione fornita da Jim, poiché utilizza maggiormente JSL fornito da JMP, ma è qualcosa che scriverei dopo aver maturato molta esperienza con JSL e JMP (parte del mio lavoro è automatizzare JMP con script e aggiungere funzionalità extra a JMP con JSL...)
Vedi altro...
Names Default To Here(1);
dt_data = Open("$DOWNLOADS/Dataset.jmp");
dt_dict = Open("$DOWNLOADS/Dictionary.jmp");
Column(dt_dict, "Values") << Set Data Type("Numeric");
/*
// Not really sure if this "fix" should be done or not
missing_rows = Loc(dt_dict[0, "Values"], .);
If(N Rows(missing_rows) > 0,
dt_dict[missing_rows, "Values"] = 0;
);
*/
Summarize(dt_dict, cols = By(:Column));
For Each({col}, cols,
dt_dict_subset = dt_dict << Subset(Rows(dt_dict << get rows where(:Column == col)), Selected Columns(0), Invisible);
Column(dt_dict_subset, "Labels") << Set Name("Result " || col);
dt_data << Update(
With(dt_dict_subset),
Match Columns(Eval(col) = :Values),
Add Columns from Update Table(Eval("Result " || col))
);
Close(dt_dict_subset, no save);
);
Write();
Innanzitutto, dovresti assolutamente comprendere appieno l'opzione fornita da Jim. Quindi potresti iniziare a pensare di utilizzare qualcosa di simile (se hai una discreta comprensione della programmazione) poiché in pratica salta la maggior parte del codice che JMP può fornirti (la maggior parte di Open() e << Update sono forniti da JMP).
Non passare direttamente alla mia soluzione prima di aver eseguito i passaggi precedenti se desideri imparare JSL e come automatizzare JMP
- Inizia con gli script forniti esclusivamente da JMP
- Migliorateli leggermente (ad esempio, utilizzate variabili invece di nomi di tabella "hard-coded")
- Inizia ad aggiungere un po' di "programmazione" al mix". È qui che considererei appartenere la soluzione di Jim (ad esempio un ciclo che JMP molto probabilmente non sarà in grado di fornirti e che utilizza la funzione Word())
- Alla fine ho ottenuto qualcosa di simile alla mia soluzione che utilizza ancora parzialmente JSL fornito da JMP (apertura di tabelle, aggiornamento di tabelle)
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaEcco un buon inizio su ciò che vuoi. Dovresti essere in grado di espanderlo per soddisfare le discrepanze in ciò che sono i tuoi requisiti finali.
Se non hai dedicato del tempo a leggere la Scripting Guide disponibile in JMP Help, ti consiglio vivamente di farlo. Inoltre, assicurati di studiare l'esempio qui sotto, così da comprendere la logica e le specifiche delle funzioni e delle istruzioni.
names default to here(1);
// Open Data Table: Dataset.jmp
// → Data Table( "Dataset.jmp" )
dt = Open( "$Downloads/Dataset.jmp" );
// Open Data Table: Dictionary.jmp
// → Data Table( "Dictionary.jmp" )
dtDict = Open( "$Downloads/Dictionary.jmp" );
/*// Subset data table
// → Data Table( "Subset of Dictionary" )
Data Table( "Dictionary.jmp" ) << Clear Select << Select Rows( Index( 1, 10 ) ) <<
Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
// Subset data table
// → Data Table( "Subset of Dictionary 2" )
Data Table( "Dictionary.jmp" ) << Clear Select << Select Rows( Index( 11, 14 ) ) <<
Subset( Selected Rows( 1 ), Selected columns only( 0 ) );*/
// Change column modeling type: Values
Data Table( "Dictionary" ):Values << Set Modeling Type( "Continuous" );
// Create a new dictionary data table for each level of the Column column
dtDictList = dtDict << Subset(
By( :Column ),
All rows,
Selected columns( 0 ),
Selected rows( 0 )
);
/*// Change column info: Values
Data Table( "Dictionary.jmp" ):Values << Data Type( Numeric ) <<
Set Field Width( 12 );*/
// Clear row selection
//Data Table( "Dataset.jmp" ) << Clear Select;
dt << Clear Column Selection();
// Change column modeling type: ETHNICITY
Data Table( "Dataset.jmp" ):ETHNICITY << Set Modeling Type( "Continuous" );
// Change column modeling type: ETHCAT
Data Table( "Dataset.jmp" ):ETHCAT << Set Modeling Type( "Continuous" );
/*// Change column modeling type: Values
Data Table( "Subset of Dictionary 2" ):Values << Set Modeling Type( "Continuous" );
// Change column modeling type: Values
Data Table( "Dictionary.jmp" ):Values << Set Modeling Type( "Continuous" );*/
For Each( {thedt, index}, dtDictList,
// Get the dataset column to join with
joinColumn = Word( 3, Char( thedt ), "=\!"" );
// Join data tables
// → Data Table( "untitled 1925" )
newDT = dt << Join(
With( thedt ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( Column( joinColumn ) = :Values ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 ),
Output Table( "Join of Dataset with Column=ETHCAT" )
);
NewDt:Labels << set name( joinColumn || " Labels" );
NewDt:Values << set name( joinColumn || " Values" );
If( index > 1,
Close( dt, nosave )
);
dt = newDT;
);Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaCiao Jim, grazie mille. I tuoi suggerimenti funzionano bene. Tuttavia, se ho un dizionario di 150 righe con categorie diverse (variabili da 5 a 30 gruppi, come ETHCAT, ETHNICITY, ecc.) e una colonna sulla tabella del set di dati che deve essere unita con 300 colonne. Per essere onesti, è difficile farlo manualmente e ho più tabelle che si uniscono. Puoi fornire lo script su 1. Come categorizzare la stessa cosa in un file di dizionario e come unire tutte le colonne del set di dati con un solo file di dizionario. Questo è lo script che provo a fare. Tuttavia, non riesco a modificare gli script.
// Open Data Table: Dataset.jmp
// → Data Table( "Dataset.jmp" )
Open( "$DOWNLOADS/Dataset.jmp" );
// Open Data Table: Dictionary.jmp
// → Data Table( "Dictionary.jmp" )
Open( "$DOWNLOADS/Dictionary.jmp" );
// Subset data table
// → Data Table( "Subset of Dictionary" )
Data Table( "Dictionary.jmp" ) << Clear Select << Select Rows( Index( 1, 10 ) ) <<
Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
// Subset data table
// → Data Table( "Subset of Dictionary 2" )
Data Table( "Dictionary.jmp" ) << Clear Select << Select Rows( Index( 11, 14 ) ) <<
Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
// Change column info: Values
Data Table( "Subset of Dictionary 2" ):Values << Data Type( Numeric ) <<
Set Field Width( 12 );
// Change column info: Values
Data Table( "Dictionary.jmp" ):Values << Data Type( Numeric ) <<
Set Field Width( 12 );
// Clear row selection
Data Table( "Dataset.jmp" ) << Clear Select;
// Change column modeling type: ETHNICITY
Data Table( "Dataset.jmp" ):ETHNICITY << Set Modeling Type( "Continuous" );
// Change column modeling type: ETHCAT
Data Table( "Dataset.jmp" ):ETHCAT << Set Modeling Type( "Continuous" );
// Change column modeling type: Values
Data Table( "Subset of Dictionary 2" ):Values << Set Modeling Type( "Continuous" );
// Change column modeling type: Values
Data Table( "Dictionary.jmp" ):Values << Set Modeling Type( "Continuous" );
// Join data tables
// → Data Table( "untitled 1925" )
Data Table( "Dataset.jmp" ) << Join(
With( Data Table( "Subset of Dictionary 2" ) ),
By Matching Columns( :ETHCAT = :Values ),
Drop multiples( 0, 0 ),
Include Nonmatches( 1, 0 ),
Preserve main table order( 1 )
);
Grazie mille,
Migliore,
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaPerché il numero di righe e colonne dovrebbe creare un problema? Se il numero di diverse ricerche (ETHCAT, ETHNICITY ecc.) è maggiore, il subsetting e l'unione dovrebbero essere semplicemente inseriti in un ciclo. Tuttavia, l'inizio è farlo in modo interattivo per 1 o 2 gruppi, quindi prendere il JSL che JMP produce per eseguire quelle operazioni e inserirlo in uno script. Quindi il looping dei passaggi può essere aggiunto allo script.
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaÈ possibile utilizzare le unioni virtuali tramite le proprietà della colonna.
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaCiao Jim, grazie per la tua idea. Tuttavia, ho più di 50 colonne e 1000 righe, hai qualche idea su un set di dati più grande?
Migliore,
Re: Come collegare il codice della colonna da una tabella a un altro set di dati della tabellaGuarda dentro
Tabelle=>Unisciti
Sottoinsieme della tabella dati Dictionary per la colonna Colonna in una tabella per ETHCAT e una per ETHNICITY. Cambia la colonna Valore in una colonna numerica. Per la tabella dati ETHNICITY, Null o Missing deve essere espanso in 2 righe con Valore con valore . e una con valore 0
Unisci ciascuna delle tabelle sottoposte a sottoinsieme alla tabella dati denominata dataset, unendo ETHNICITY con Value per la prima tabella e ETHCAT con Value per la seconda tabella.