Esegui la formula sulle colonne del sottoinsiemeHo creato uno script per creare una tabella sottoinsieme di una tabella più grande, ma non funziona correttamente. Il mio obiettivo è fare in modo che l'utente selezioni quali colonne desidera nella tabella del sottoinsieme e quindi fare in modo che lo script esegua una formula sulle colonne prima di inserire i dati nella nuova tabella.Finora il mio script visualizzerà la finestra di dialogo per l'interazione dell'utente, ma quando seleziono le colonne nella finestra di dialogo, non sono quelle visualizzate nella tabella dei sottoinsiemi. Non sono sicuro di dove risieda il mio problema. (Nota: l'utente selezionerà colonne con dati al loro interno, anziché informazioni di esempio, quindi nell'esempio colonne con nomi di colonna che iniziano con "Colonna 10...".)
Inoltre, non sono sicuro di dove inserirei la formula. Fondamentalmente le colonne che l'utente seleziona dalla finestra di dialogo avranno alcune celle con < simboli, per la nuova tabella del sottoinsieme, vorrei che qualsiasi cella senza un simbolo minore di girasse a zero e qualsiasi cella con un simbolo < avesse il simbolo < rimosso inserendo solo il numero accanto nella tabella dei sottoinsiemi. Pertanto la nuova tabella dei sottoinsiemi avrà zeri per i valori rilevati e il limite di rilevamento per i composti non rilevati.
Ecco la mia sceneggiatura finora.
Names Default To Here( 1 );
dt = Data Table("Example Data");
col_dlg = new window("Column Select",
panelbox("Select columns to create NonDetect table with",
col_clist = collistbox(all, width(200)),
buttonbox("Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset(Output Table("NonDetect"),columns(col_clist));
col_dlg << close window;
)
)
);Grazie per tutto l'aiuto!
Ri: Eseguire la formula sulle colonne del sottoinsiemeOra hai la possibilità di pagare i contributori alla comunità di discussione... approfondisci la Guida allo scripting e l'Indice di scripting per diventare un utente esperto e ricambiare con la tua partecipazione.
Ri: Eseguire la formula sulle colonne del sottoinsiemeHa funzionato! Grazie mille per il tuo tempo e la tua pazienza. Lo apprezzo davvero!
Lacey
Ri: Eseguire la formula sulle colonne del sottoinsiemeSi scopre che la funzione Substr() non funziona sulle righe selezionate (non so perché), quindi ho modificato leggermente il codice e l'ho testato (ovviamente non avevo testato la mia ultima versione)
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select all of the currently non selected columns and unselect the current ones
dt2 << select where( Contains( As Column( dt2, selected_column_list[i] ), "<" ) == 0 );
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows] = "0";
// Find the rows with the "<" in them
dt2 << invert row selection;
selRows = dt2 << get selected rows;
//selRows= dt2 << Get Rows Where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
For( k = 1, k <= N Rows( selRows ), k++,
Column( dt2, selected_column_list[i] )[selRows[k]] = Substr( As Column( dt2, selected_column_list[i] )[selRows[k]], 2 )
);
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) << modeling type( continuous );
);
col_dlg << close window;
)
)
);Ri: Eseguire la formula sulle colonne del sottoinsiemeForse ho messo la (nel posto sbagliato? Ecco cosa ho adesso.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] =
substr(As Column( dt2, selected_column_list[i] ),2);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows ()] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Ri: Eseguire la formula sulle colonne del sottoinsiemeGrazie per la sua pronta risposta! Ho provato 2 ma finisco con zeri dai valori rilevati e spazi vuoti per tutte le celle con
Ri: Eseguire la formula sulle colonne del sottoinsiemeoops.....errore mio, cambia "1" nella funzione substr() in "2" e questo dovrebbe risolvere il problema
Ri: Eseguire la formula sulle colonne del sottoinsiemeIl secondo codice che hai inviato per la seconda tabella non sembra funzionare. Ho passato alcune ore a provare cose diverse. Ho notato che mancavano due (. Ciò ha aiutato l'esecuzione del codice senza errori, tuttavia la parte di codice che rimuove il simbolo "<" non sembra funzionare correttamente. Se rimuovo quel pezzettino di codice, la tabella finisce con i valori rilevati come 0 e i valori ND ancora intatti, con il simbolo <. Ho provato a giocherellare con esso ma non l'ho ancora capito. Qualche indizio? 
Grazie!
Ri: Eseguire la formula sulle colonne del sottoinsiemeEcco il codice per gestire il tuo secondo caso
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Select the rows where there is a "<" for the target column
dt2 << Select where(Contains(As Column( dt2, selected_column_list[i] ),"<" )==1);
// Get rid of the "<" making the value a valid numeric value
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] =
substr(As Column( dt2, selected_column_list[i] ),1);
// Select all of the currently non selected columns and unselect the current ones
dt2 << invert row selection;
// Set for the target column all of the currently selected rows to "0"
Column( dt2, selected_column_list[i] )[dt2 << get selected rows )] = "0";
// Convert the column to a numeric/continuous column
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
);
col_dlg << close window;
)
)
);Ri: Eseguire la formula sulle colonne del sottoinsiemeFunziona benissimo per la tabella Rileva, quindi per la mia seconda tabella vorrei cambiare i valori che diventano zero, quindi non penso che questo approccio funzionerà. Vorrei mantenere le celle che hanno il simbolo < e portare il resto delle celle a zero. Quindi vorrei rimuovere il simbolo < lasciando solo valori numerici. Nella mia testa immagino che farei il ciclo come lo hai tu, quindi aggiungerei un'istruzione if/else?
E grazie per aver pubblicato l'istruzione if/else. Il mio problema era non avere il num() prima del nome della colonna per il resto!
Ri: Eseguire la formula sulle colonne del sottoinsiemeEcco un cambiamento nella sceneggiatura che penso potresti trovare come un buon approccio.Ciò che interpreto come ciò che vuoi fare è creare una colonna numerica che contenga i valori dalle colonne di caratteri selezionati, ma se i valori contengono un simbolo "<", imposta tali voci su zero (0).Lo script seguente lo fa, senza creare nuove colonne.Converte le colonne in numeriche e imposta le celle "<" su zero.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
// Loop across the columns in the new data table and convert them to numeric
// Cells with nonnumeric values will be set to Missing Values, which then can
// be identified and set to 0
For( i = 1, i <= N Items( selected_column_list ), i++,
// Change the column to numeric/continuous
// The names in the data table are very complex, containing symbols, etc.
// that JMP will confuse as operators. Therefore, using the Column()
// function, or a :Name(" ") function to wrap around the column name
// needs to be used
Column( dt2, selected_column_list[i] ) << data type( numeric ) <<
modeling type( continuous );
// Now find all of the rows in the table that have Missing Values
// in the target column, and then set them all to "0" in one
// statement
Column( dt2, selected_column_list[i] )[dt << get rows where(
Is Missing( As Column( dt2, selected_column_list[i] ) )
)] = 0;
);
col_dlg << close window;
)
)
);
Potresti creare nuove colonne e impostare una formula come hai indicato nella tua ultima risposta.Il problema che riscontri con ciò che hai fornito riguarda la complessità dei nomi delle colonne. Ecco come funzionerebbe
If( Contains( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ), "<" ),
0,
Num( :Name( "Column 10 1,2,3,4,6,7,8-HpCDD" ) )
)
Ri: Eseguire la formula sulle colonne del sottoinsiemePenso che sia qui che ho i miei problemi, sono molto abile in Excel e eseguo tutte le mie analisi dei dati da 9 anni. Sto solo cercando di trasferire e ho difficoltà con le mie istruzioni if/then in jmp (tra le altre cose). Lo scriverò in termini di Excel e forse potresti aiutarmi?
Realizzerò due di queste tabelle di sottoinsiemi. Uno per i valori rilevati e uno per i valori non rilevati. Per i valori rilevati farei un'istruzione if/then come =if(isnumber(J2),J2,0). Per i valori non rilevati farei qualcosa del tipo =if(isnumber(J2),0,J2).
Stavo cercando di cambiarlo in JMP
Se ( Contiene (: Colonna 10 1,2,3,4,6,7,8-HpCDD , "<" ), 0 ,:Colonna 10 1,2,3,4,6,7,8-HpCDD )
ma non sembra funzionare anche se creo io stesso una colonna e inserisco la formula.
Quindi, fondamentalmente, nel mio script includerò due parti, una per la tabella NonDetect e una per la tabella Detect e vorrei che le colonne venissero trasformate come tali, utilizzando l'istruzione if then? Alla fine invierò le due tabelle di dati a R per imputare i valori non rilevati utilizzando i DL rimanenti nel sottoinsieme NonDetect. Spero che questo lo spieghi?
Ri: Eseguire la formula sulle colonne del sottoinsiemeQual è la formula che vuoi calcolare?Richiede davvero la creazione di una nuova colonna?Ricorda, questo non è Excel.Per generare valori o risultati, non è necessario inserirli in colonne....ci sono altre strutture.Puoi descrivere più in dettaglio cosa stai cercando di fare?
Ri: Eseguire la formula sulle colonne del sottoinsiemeAh, funziona.
C'è un modo per completare quindi una formula sui dati prima che venga inserita nella nuova tabella? In caso contrario, il mio pensiero era quindi quello di creare nuove colonne nella tabella del sottoinsieme, completare il calcolo nelle nuove colonne e quindi eliminare le colonne originali (utilizzando lo script). Esiste un modo più efficiente per farlo?
Grazie!
Ri: Eseguire la formula sulle colonne del sottoinsiemeStavi facendo riferimento all'oggetto di visualizzazione, col_clist, anziché al suo contenuto, che avevi inserito in Selected_column_list.
Names Default To Here( 1 );
dt = Data Table( "Example Data" );
col_dlg = New Window( "Column Select",
Panel Box( "Select columns to create NonDetect table with",
col_clist = Col List Box( all, width( 200 ) ),
Button Box( "Ok",
selected_column_list = col_clist << getselected;
dt2 = dt << Subset( Output Table( "NonDetect" ), columns( selected_column_list ) );
col_dlg << close window;
)
)
);