Aiuto nella conversione di uno script iterativo SAS (9.1) in JSL ...?Buona giornata a tutti.
Ho problemi con il tentativo di convertire alcuni vecchi codici SAS 9.1, che eseguono un calcolo iterativo ("do until"), in JSL (sto eseguendo JMP 13).
Allegato è il codice SAS originale così come appare nella finestra JMP quando apro il file * .SAS. Ho isolato la sottosezione pertinente dello script dallo script SAS originale e l'ho allegato in formato * jsl come "mg_in_olivine.jsl".
Ho anche incluso un set di dati fittizio con 29 record e sono già stati calcolati alcuni parametri richiesti (il resto delle numerose colonne è stato nascosto):
t_niK
PCr
dv
xmg_gt
xfe_gt
xca_gt
Apprezzerei molto ogni aiuto che posso ottenere.
Grazie molto.
Rob Preston (Johannesburg).
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Pensa che ce l'ho - non ho avuto problemi con la semplice istruzione IF, era solo l'iterazione.
Grazie ancora per il tuo aiuto, ci sto arrivando anche se lentamente.
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Grazie mille per il tuo aiuto Jim.
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?1. Ti incoraggio a dare ascolto al suggerimento di Marco sulla lettura della Guida agli script. Quello che stai chiedendo nella tua ultima richiesta è solo imparare come appare una dichiarazione "IF" in JMP. La conversione della sintassi dalla lingua alla lingua tipicamente consiste solo nel risolvere alcuni problemi linguistici minori.
2. Puoi anche usare l'indice di scripting
Aiuto ==> Indice di scripting
per vedere non solo la documentazione sulla dichiarazione "SE", ma anche un esempio
Ecco l'esempio dall'indice Scripting per la funzione IF. Tradurrà direttamente alla tua ultima richiesta.
Names Default To Here( 1 );
If( Random Uniform() < 0.5,
"heads",
"tails"
);
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Ciao di nuovo Jim.
Alla fine dello script, il valore finale dell'output dovrebbe essere xmg_ol dato che ii è il valore di input per la prossima sezione di codice (come segue):
/ ** ora applica la correzione di Gaul et al per cr2o3 - vedi p. 225 ** /
/ ** nota che in Gaul et al Delta-Fo è in percentuale ** /
/ ** assicurati di cr2o3> 0 altrimenti otteniamo log ERROR ** /
se cr2o3 <= 0 allora
cr_corr = 0;
altro
cr_corr = (-1.2901 * log10 (cr2o3) + 0.69) /100.0;
xmg_ol_corr = xmg_ol + cr_corr;
xmg_ol = xmg_ol_corr;
fo_oliv = xmg_ol * 100.0;
Sono un po 'all'oscuro (per non dire altro) ... ma apprezzo il tuo aiuto.Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Ciao Jim. Grazie mille per la risposta.
Solo controllando...
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Questo potrebbe essere quello che stai cercando?
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "xmg_ol_diff" );
For( i = 1, i <= N Rows( dt ), i++,
counter = 0;
While( Abs( dt:xmg_ol_diff[i] ) > 0.00001 | Is Missing( dt:xmg_ol_diff[i] ) == 1,
counter++;
If( counter > 100, Break() );
logKd = (902 + dt:dv[i] + (dt:xmg_ol_est[i] - dt:xfe_ol_est[i]) * (498 + 1.51 * (dt:PCr[i] - 30)) - 98 * (dt:xmg_gt[i] - dt:xfe_gt[i])
+1347 * dt:xca_gt[i]) / dt:t_niK[i] - 0.357;
Kd = Exp( LogKd );
xmgfe_ol = Kd * (dt:xmg_gt[i] / dt:xfe_gt[i]);
xmg_ol = xmgfe_ol / (1 + xmgfe_ol);
dt:xmg_ol_diff[i] = xmg_ol - dt:xmg_ol_est[i];
dt:xmg_ol_est[i] = xmg_ol; /** reset xmg_ol_est for next iteration **/
dt:xfe_ol_est[i] = 1.0 - xmg_ol;
);
);

Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Grazie Marco.
Ri: Aiuto con la conversione di uno script di iterazione SAS (9.1) in JSL ...?Guarda al Mentre() funzione per questo tipo di iterazione.
- Guida> Libri> Guida allo scripting