Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenCiao, sto cercando di creare e popolare un gruppo di nuove colonne in base ai risultati di un'istruzione if/then.
PASSO 1:
Devo creare le nuove colonne vuote che verranno popolate.(55 in tutto)
(Ogni nuova colonna è un campo numerico continuo.)
Il nome di ciascuna colonna corrisponderà al nome di ciascuno dei 55 composti del gruppo seguito da "_ppt".Ad esempio, il composto denominato "4:2 FTS" risulta in una nuova colonna denominata [4:2 FTS_ppt].
PASSO 2:
Riga per riga, popolerei le nuove colonne utilizzando un'istruzione if/then che valuta tre colonne esistenti associate a ciascuno dei 55 composti del gruppo.Nello specifico,
if [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] THEN [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
se [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] <= 3 THEN [4:2 FTS_ppt] = 0,0009.
se [RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] > 3 THEN [4:2 FTS_ppt] = NULL.
Di seguito sono riportati i nomi delle colonne esistenti con un suffisso che rappresenta il nome composto.Sto utilizzando JMP Pro 17.0.



Qualsiasi consiglio sarebbe molto apprezzato!
Automazione e scriptingOrganizzazione dei contenutiRi: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/then- Lo scopo della comunità di discussione non è quello di fornire agli utenti JMP la possibilità di ottenere script scritti su loro richiesta.È lì per assistere gli utenti nell'apprendimento di JMP.
- Dato lo pseudo codice che hai fornito, è chiaro che devi prenderti il tempo per leggere la Guida allo scripting JMP.È disponibile nella libreria della documentazione di JMP nel menu a discesa Guida in JMP.
- Di seguito è riportato un tentativo di aiutarti con il tuo problema.Non è testato, poiché non ho nessuno dei tuoi dati.Per favore prenditi il tempo per studiare e imparare il codice.Le funzioni sono ben documentate nello Scripting Index e nel JSL Scripting Reference.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenGrazie Jim.Sì, punto ben preso.Ho bisogno di dedicare più tempo alle basi di JSL prima di lanciarmi nel mio lavoro.
Il codice precedente ha creato correttamente tutte le colonne, ma la formula produce solo valori nulli (".").Non sono riuscito a risolvere l'errore ma continuerò a provare.Grazie ancora.
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenDarò un'occhiata se puoi fornire alcuni dati di esempio.
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenGrazie Jim.Ho allegato la tabella jmp di seguito che contiene un piccolo sottoinsieme di righe dal mio set di dati.
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenDue cose dovevano essere cambiate.
- Il valore della variabile x utilizzata nella formula deve essere inizializzato per l'esecuzione di ogni riga.
- L'esecuzione della formula deve essere disattivata.
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenGrazie Jim.Volevo tornare indietro poco dopo la tua risposta, ma ho provato a eseguire il dubug del codice.Non sono riuscito a farlo funzionare per qualche motivo.Ho usato il debugger e ho ricevuto questo messaggio:

Volevo solo farti sapere che ho ricevuto il tuo contributo: continuerò a provare.Grazie.
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/then
Ri: Devo popolare una nuova colonna in base ai risultati di un'istruzione if/thenSÌ!L'ho appena fatto funzionare.Grazie ancora per il tuo aiuto in questo!