Come creare uno script JMP per creare una nuova finestra per l'input dell'utente assegnando valori a una colonna in base a un'altra colonnaCiao,
Sono bloccato su una parte specifica del mio script JMP e spero di ricevere aiuto da un diverso paio di occhi.
Ho un set di dati che assomiglia a questo, ma con molte più categorie, ognuna con nomi più lunghi.

Voglio creare un'altra colonna, con valori numerici, in base alla colonna data. Questo prodotto deve essere completamente automatizzato, con una finestra pop-up con ciascuna delle categorie elencate, con caselle di modifica numeriche in cui l'utente può inserire i valori numerici che corrisponderanno a una categoria. Per esempio:
Finestra pop-up: nuova finestra con tutti i prompt nella finestra pop-up.
Inserisci il valore corrispondente ad A: ___1___ Inserisci il valore corrispondente a B: ___2___ Inserisci il valore corrispondente a C: ___3___ Immettere il valore corrispondente a  ___4___ Immettere il valore corrispondente a E: ___5___ |
La tabella dei dati risultante dovrebbe essere simile a questa:

Di seguito è riportato lo script JMP che ho in questo momento. Ho anche caricato il file JMP in questo post. Quello per cui ho bisogno di aiuto è in testo rosso sotto. Ho problemi ad assegnare il valore i-esimo nel ciclo for, in base all'input dell'utente e corrispondente alla categoria univoca i-esima nell'elenco, carattere_univoco , alla i-esima posizione nell'elenco numerico inizializzato, num_list , che verrà utilizzato più avanti nel ciclo for successivo per creare la colonna 2 (alla fine dello script JMP di seguito).
dt = Current Data Table();
//get the unique character variable list
Names Default To Here( 1 );
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys; // unique_char = {"A", "B", "C", "D", "E"}
//get n items in character variable list
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
//initalize number list
num_list = {};
//create new window to create multiple number edit boxes
nw = New Window( "Set Values",
<<MODAL> // HELP:
// name a numeric variable on each iteration that will be the holder of a numeric edit box
// put the resulting ith entry into the num_list
num_list[i] = number edit box(),
// number box default is null/missing. If no input, place a missing value in the num_list
)
);<BR /><BR />// TO DO: <BR />// Create new column assigning the num_list values to <BR />// the corresponding rows based the unique character value. <BR />// Pseudo-code: <BR />// for(i in 1:nuniquechar)<BR />// if :column 1 = unique_char[i], num_list[i]<BR />//<BR />//</MODAL>I risultati di ciò saranno la versione automatizzata e intuitiva dell'utilizzo della seguente logica condizionale per rendere la colonna 2 basata sulle categorie della colonna 1.

Tabella datiRe: Come creare uno script JMP per creare una nuova finestra per l'input dell'utente assegnando valori a una colonna in base a un'altra colonnaSto usando << Imposta funzione con la casella di modifica del numero per ottenere i valori nell'array associativo unique_aa. Quindi, usando quell'array associativo per costruire la colonna della formula necessaria, dopo aver chiuso la finestra modale.
Names Default To Here(1);
dt = Current Data Table();
//get the unique character variable list
col9 = Column(dt, "Column 1");
unique_char = Associative Array(col9) << get keys;
nuniquechar = N Items(unique_char); //will be 5, if categories are A, B, C, D, E
unique_aa = Associative Array(unique_char, Repeat({.}, nuniquechar)); //repeat to initialize values as missing
//create new window to create multiple number edit boxes
vlbExpr = V List Box();
For(i = 1, i <= nuniquechar, i++,
Insert Into(vlbExpr, Text Box("Number for " || Char(unique_char[i]) || ":")); //i.e. "Number for A:"
Eval(
Eval Expr(Insert Into(vlbExpr, Number Edit Box(., <<SET function=""></SET>
Per informazioni su Eval(EvalExpr()) vedere Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute . E se vuoi avere la formula
Re: Come creare uno script JMP per creare una nuova finestra per l'input dell'utente assegnando valori a una colonna in base a un'altra colonnaEcco un piccolo script che ho messo insieme - non potresti volere un selettore opzionale per rendere numerica la nuova colonna (qui la lascio semplicemente come carattere).
Devi inserire un nuovo nome di colonna e c'è un controllo da non eseguire se il nuovo nome esiste attualmente nella tabella dei dati (so che JMP non sovrascriverà una colonna, ma può ancora essere fonte di confusione).
/* recode */
self = New Namespace();
Show( self << Get Name );
self:table = Current Data Table();
self:column = Insert( {}, self:table << Get Selected Columns );
self:column = self:column[1] << Get Name;
Show( self:column );
self:values = Associative Array( Column( self:table, self:column ) ) << Get Keys;
self:string list = {};
For( i = 1, i <= N Items( self:values ), i++,
Insert Into( self:string list, Char( i ) )
);
Eval( Eval Expr(
win = New Window( "Set Values",
<<MODAL></MODAL>Re: Come creare uno script JMP per creare una nuova finestra per l'input dell'utente assegnando valori a una colonna in base a un'altra colonnaHai considerato il? Cols > Ricodifica piattaforma?Potrebbe essere un buon modo low-tech per fare quello che vuoi.
Re: Come creare uno script JMP per creare una nuova finestra per l'input dell'utente assegnando valori a una colonna in base a un'altra colonnaDi sicuro, è qualcosa che ho pensato di fare prima di rimanere bloccato. Ma voglio avere un'applicazione per le persone che non conoscono molto bene l'interfaccia JMP.