Da SAS a JSL - Eseguire loop...Sono un utente SAS da molto tempo costretto a imparare JSL ...
Le cose che ho trovato facili in SAS sembrano così difficili in JSL...
Qualcuno potrebbe mostrarmi come funzionano i Do Loops in JSL condividendo con me il codice JSL che genererebbe la seguente tabella do loop nidificata usando JSL?
data frustration;
do temp = 1 to 10 by 1;
do press = 5 to 20 by 5;
do time = 1 to 1000 by 20;
output;
end;
end;
end;
run;
Dovrebbe essere abbastanza semplice creare questi tipi di simulazioni, ma non riesco a capirlo.
ScriptingRi: Da SAS a JSL - Fare loop...Jeff, mi dispiace tanto per il ritardo. Sei andato ben oltre con questa risposta e ti ringrazio. Il motivo per cui non ho ricontrollato è perché sono riuscito a farlo funzionare come volevo. Grazie mille per la spiegazione delle differenze tra JSL e SAS. È stato davvero utile
Ri: Da SAS a JSL - Fare loop...CIAO @fat_angus , benvenuto in qualità di utente JMP e nella community degli utenti di JMP.
Come programmatore SAS di lunga data (lo sono anch'io) dovrai pensare a JMP e JSL in modo molto diverso dal modo in cui pensi a SAS.
Ad esempio, hai pubblicato una domanda su un passaggio SAS DATA. Come sai, il passaggio DATA riguarda la creazione di un set di dati SAS. Non esiste un equivalente diretto per il passaggio DATA in JSL poiché JSL riguarda principalmente l'automazione delle cose che faresti in modo interattivo in JMP.
Per questo motivo, incoraggio sempre le persone ad assicurarsi di disporre di una buona base nell'utilizzo interattivo di JMP prima di iniziare a pensare a quali attività desiderano automatizzare.
Ad esempio, per creare la tabella dati che crei nel tuo passaggio DATI, creerei un File->Nuova tabella...
Poi Cols->Nuove colonne... per aggiungere una nuova colonna e assegnarla una formula usando il Sequenza() funzione.

Temp columnTemp columnColonna Temp
Farei lo stesso per le altre colonne.
press columnpress columncolonna stampa
time columntime columncolonna del tempo
Dopo aver aggiunto le righe alla tabella dei dati, ti ritroverai con questo:

Quando sei pronto puoi andare al triangolo rosso accanto al nome della tabella dati e Copia script tabella.

Questo ti darà il seguente script per creare una nuova tabella:
New Table( "untitled",
Add Rows( 2000 ),
New Column( "temp",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 10, 1, 200 ) )
),
New Column( "press",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 5, 20, 5, 50 ) )
),
New Column( "time",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Sequence( 1, 1000, 20 ) ),
)
)
Ci sono, naturalmente, altri modi interattivi per ottenere la tabella che hai descritto nel tuo passaggio DATA. Potresti creare tre tabelle con le tue sequenze e poi usarle Tabelle->Unisciti e un paio di Join cartesiani per ottenere lo stesso tavolo. Quando sei pronto, JMP può fornirti gli script per questi passaggi lungo il percorso.
Indipendentemente da ciò, tutto inizia con la comprensione di come utilizzare JMP e in particolare le tabelle di dati in modo interattivo prima di pensare a crearne uno script. Dopotutto, non sai cosa è necessario per lo script fino a quando non sai già cosa può fare JMP con gli strumenti integrati.
Continua a imparare e continua a fare domande qui nella Community. Siamo felici di aiutarti!
Ri: Da SAS a JSL - Fare loop...Questo è fantastico Craige_HALES!
Apprezzo molto che tu abbia dedicato del tempo a spiegare.
Ri: Da SAS a JSL - Fare loop...Grazie SUPER USER PMROZ ancora una volta; questo è utile.
Ri: Da SAS a JSL - Fare loop...Un esempio completo, apprezzando quanto sia difficile iniziare in una nuova lingua. (L'help->scripting index e la guida in linea sono risorse complementari. Uso principalmente l'help->scripting index, per ricordarmi come funziona. La guida in linea potrebbe essere migliore per iniziare.) Qui ho messo un po' più del necessario. Ho dimenticato le regole SAS per i casi di nomi...
Names Default To Here( 1 );
// what does that mean? JSL has several namespaces; the 'here' namespace is for this
// editor window and means 'press' is really 'here:press' but 'dtFrustration:press' belongs to
// the table's namespace (of column names.) You could also just use different names,
// like 'iPress' for the loop control variable. JMP's variable names are almost never
// case sensitive, the weird exception being column names, which are only sensitive <BR />// if both 'Age' and 'age' are columns...Don't do that!
// an easy way to get this table script is to make a new table with the
// JMP GUI, then use the top-left red triangle to 'Copy Table Script (No Data)'.
// By convention, JSL uses 'dt' in the variable name that holds a handle to a table.
dtFrustration = New Table( "frustration",
New Column( "temp" ), // continuous numeric by default
New Column( "press" ),
New Column( "time" )
);
// because the table might be linked to other reports, there
// is a lot of hidden messaging when the table changes. A lot.
// The messaging can be shut off and later enabled for a nice speedup.
// (to see it take longer, rerun just the loop below.)
// dtFrustration << BeginDataUpdate; // pair with EndDataUpdate, below
For( temp = 1, temp <= 10, temp++,
For( press = 5, press <= 20, press += 5,
For( time = 1, time <= 1000, time += 20,
dtFrustration << addrows( 1 );
dtFrustration:time = time;
dtFrustration:temp = temp;
dtFrustration:press = press;
)
)
);
// dtFrustration << EndDataUpdate;
Ri: Da SAS a JSL - Fare loop...Trovo più facile imparare con l'esempio, quindi guarda tutto il codice che puoi trovare in questo forum.Una volta che inizi, l'indice di scripting sarà davvero tuo amico.
La JSL per loop e Se affermazione, sebbene semplice nel concetto, inizialmente mi lasciava un po' perplesso.Per accorciare la tua curva di apprendimento Se , ricorda che è una funzione e la virgola rappresenta Poi , altrimenti se E altro .Apre una finestra di script ( ctrl-T ), fare clic con il pulsante destro del mouse nella finestra e selezionare Mostra registro incorporato .Incolla il codice sottostante e fai clic ctrl-R per eseguirlo.Gioca con valori diversi per a, b e c per vedere cosa succede.
a = 1;
b = 2;
c = 1;
if (a == b,
// then
print("a is equal to b");
,
// else if
a == c,
// then
print("a is equal to c");
,
// else
print("No match found for a");
);
Ri: Da SAS a JSL - Fare loop...Grazie... questo è utile.
Ri: Da SAS a JSL - Fare loop...Ho sentito quello che stai dicendo... grazie... ma è un po' come se qualcuno ti dicesse di leggere la Bibbia per capire il cristianesimo... Ho passato circa 2 ore nella guida alla sceneggiatura cercando come farlo apparentemente concetto semplice... inoltre, ho avuto molto successo scrivendo altri script... ma onestamente, la guida allo scripting mi fa desiderare altri 20k di budget per una licenza SAS.
Non sono un programmatore hardcore... Sono un ingegnere che cerca solo di fare le cose velocemente.
Ri: Da SAS a JSL - Fare loop...Grazie per l'aiuto pmroz
Ri: Da SAS a JSL - Fare loop...Guida per programmatori C++ a JSL potrebbe anche essere di qualche aiuto. Cerca di mostrare come l'istruzione JSL for sia davvero una funzione, e sapere che renderà molto più facile ottenere la sintassi corretta.
Ri: Da SAS a JSL - Fare loop...Tutto questo è trattato nella Scripting Guide, che consiglio vivamente di leggere.È disponibile nella libreria della documentazione di JMP, disponibile nel menu a discesa Guida in JMP.
Ri: Da SAS a JSL - Fare loop...Sei nel posto giusto per ricevere assistenza nell'apprendimento di JSL.L'indice di scripting è tuo amico, così come la documentazione in linea.
Ecco uno snippet di codice che fa quello che vuoi:
dt = data table("frustration");
for (temp = 1, temp <= 10, temp++,
for (press = 5, press <= 20, press+=5,
for (time = 1, time <= 1000, time+=20,
show(temp, press, time); // output
);
);
);