Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Guten Tag alle.
Ich habe Probleme beim Versuch, alten SAS 9.1-Code zu konvertieren, auf dem ein Code ausgeführt wird iterative Berechnung ("do before"), in JSL (ich verwende JMP 13).
Beigefügt ist der ursprüngliche SAS-Code, wie er im JMP-Fenster angezeigt wird, wenn ich die * .SAS-Datei öffne. Ich habe den relevanten Unterabschnitt des Skripts aus dem ursprünglichen SAS-Skript isoliert und im * jsl-Format als "mg_in_olivine.jsl" angehängt.
Ich habe auch ein Dummy-Dataset mit 29 Datensätzen beigefügt, und eine Anzahl der erforderlichen Parameter wurde bereits berechnet (der Rest der zahlreichen Spalten wurde ausgeblendet):
t_niK
PCr
dv
xmg_gt
xfe_gt
xca_gt
Ich würde mich sehr über jede Hilfe freuen, die ich bekommen kann.
Danke vielmals.
Rob Preston (Johannesburg).
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Ich glaube, ich habe es verstanden - ich hatte kein Problem mit der einfachen IF-Anweisung, es war nur die Iteration.
Nochmals vielen Dank für Ihre Hilfe, ich komme zwar langsam voran.
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Vielen Dank für Ihre Hilfe, Jim.
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?1 Ich möchte Sie ermutigen, den Vorschlag von Mark zu beachten, den Scripting Guide zu lesen. In Ihrer letzten Anfrage fragen Sie einfach nach, wie eine "IF" -Anweisung in JMP aussieht. Das Konvertieren der Syntax von Sprache zu Sprache führt in der Regel dazu, einige kleinere Sprachprobleme herauszufinden.
2 Sie können auch den Skriptindex verwenden
Hilfe ==> Skriptindex
um nicht nur die Dokumentation zur "IF" -Anweisung zu sehen, sondern auch ein Beispiel
Hier ist das Beispiel aus dem Scripting Index für die IF-Funktion. Es wird direkt zu Ihrer letzten Anfrage übersetzt.
Names Default To Here( 1 );
If( Random Uniform() < 0.5,
"heads",
"tails"
);
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Hallo nochmal Jim.
Am Ende des Skripts sollte der endgültige Ausgabewert xmg_ol sein, da ii der Eingabewert für den nächsten Codeabschnitt ist (wie folgt):
/ ** wende jetzt die Korrektur von Gaul ua für cr2o3 an - siehe S. 225 ** /
/ ** Beachten Sie, dass Delta-Fo in Gallien ua in Prozent ** /
/ ** stelle sicher, dass cr2o3> 0 ist, andernfalls erhalten wir log ERROR
wenn cr2o3 <= 0, dann
cr_corr = 0;
sonst
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;
Ich bin ein bisschen ahnungslos (um es gelinde auszudrücken) ... aber ich schätze Ihre Hilfe.Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Hallo Jim. Vielen Dank für die Antwort.
Einfach nachsehen ...
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Könnte das sein, wonach Sie suchen?
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;
);
);

Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Danke, Mark.
Re: Hilfe bei der Konvertierung eines SAS-Iterationsskripts (9.1) in JSL ...?Schaue auf die Während() Funktion für diese Art der Iteration.
- Hilfe> Bücher> Skripthandbuch