SAS a JSL - Hacer bucles...Soy un usuario de SAS desde hace mucho tiempo que se ve obligado a aprender JSL ...
Las cosas que encontré fáciles en SAS parecen tan difíciles en JSL...
¿Podría alguien mostrarme cómo funcionan los bucles en JSL compartiendo conmigo el código JSL que generaría la siguiente tabla de bucles anidados 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;
Esto debería ser bastante simple para crear este tipo de simulaciones, pero parece que no puedo resolverlo.
secuencias de comandosRe: SAS a JSL - Hacer bucles...Jeff, lamento llegar tarde a esto. Fuiste más allá con esta respuesta y te lo agradezco. La razón por la que no he vuelto a comprobar es porque pude hacer que funcionara como quería. Muchas gracias por la explicación de las diferencias entre JSL y SAS. fue realmente útil
Re: SAS a JSL - Hacer bucles...Hola @fat_angus , bienvenido a ser usuario de JMP ya la comunidad de usuarios de JMP.
Como programador de SAS desde hace mucho tiempo (yo mismo lo soy), deberá pensar en JMP y JSL de manera muy diferente a como piensa en SAS.
Por ejemplo, publicó una pregunta sobre un paso de DATOS de SAS. Como sabe, el paso DATA se trata de crear un conjunto de datos SAS. No existe un equivalente directo para el paso DATA en JSL, ya que JSL se trata principalmente de automatizar las cosas que haría de forma interactiva en JMP.
Por esa razón, siempre animo a las personas a asegurarse de tener una buena base para usar JMP de forma interactiva antes de comenzar a pensar en qué tareas quieren automatizar.
Por ejemplo, para crear la tabla de datos que creó en el paso DATOS, crearía un Archivo->Nueva tabla...
Entonces Cols->Nuevas Columnas... para agregar una nueva columna y darle una fórmula utilizando el Secuencia() función.

Temp columnTemp columncolumna temporal
Yo haría lo mismo con las otras columnas.
press columnpress columncolumna de prensa
time columntime columncolumna de tiempo
Después de agregar filas a la tabla de datos, terminará con esto:

Cuando esté listo, puede ir al triángulo rojo junto al nombre de la tabla de datos y Copiar script de tabla.

Eso le dará la siguiente secuencia de comandos para crear una nueva tabla:
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 ) ),
)
)
Hay, por supuesto, otras formas interactivas de obtener la tabla que ha descrito en su paso DATA. Podría crear tres tablas con sus secuencias y luego usar Tablas->Unirse y un par de Uniones cartesianas para conseguir la misma mesa. Cuando esté listo, JMP puede proporcionarle las secuencias de comandos para esos pasos en el camino.
Independientemente, todo comienza con la comprensión de cómo usar JMP y especialmente las tablas de datos de forma interactiva antes de pensar en crear un script. Después de todo, no sabe qué es necesario para crear scripts hasta que ya sabe lo que JMP puede hacer con las herramientas integradas.
Sigue aprendiendo y sigue haciendo preguntas aquí en la Comunidad. ¡Estamos felices de ayudar!
Re: SAS a JSL - Hacer bucles...¡Esto es genial Craige_HALES!
Le agradezco mucho que se tome el tiempo para explicar.
Re: SAS a JSL - Hacer bucles...Gracias SUPER USUARIO PMROZ una vez más; esto es útil
Re: SAS a JSL - Hacer bucles...Un ejemplo completo, apreciando lo difícil que es iniciarse en un nuevo idioma. (El índice de ayuda->secuencias de comandos y la ayuda en línea son recursos complementarios. Principalmente uso el índice de ayuda->secuencias de comandos, para recordarme cómo funciona. La ayuda en línea podría ser mejor para comenzar). Puse un poco más aquí de lo necesario. He olvidado las reglas de SAS para el caso de los nombres...
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;
Re: SAS a JSL - Hacer bucles...Me resulta más fácil aprender con el ejemplo, así que mire todo el código que pueda encontrar en este foro.Una vez que comience, el índice de secuencias de comandos será verdaderamente su amigo.
El JSL para bucles y si declaración, aunque simple en concepto, fueron un poco desconcertantes para mí al principio.Para acortar su curva de aprendizaje sobre si , recuerda que es una función, y la coma representa entonces , más si y demás .Abra una ventana de secuencia de comandos ( ctrl-T ), haga clic derecho en la ventana y seleccione Mostrar registro incrustado .Pegue el siguiente código y haga clic en ctrl-R para ejecutarloJuega con diferentes valores para a, b y c para ver qué sucede.
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");
);
Re: SAS a JSL - Hacer bucles...Gracias... esto es útil.
Re: SAS a JSL - Hacer bucles...Escucho lo que dice... gracias... pero es como si alguien le dijera que lea la Biblia para entender el cristianismo... Pasé unas 2 horas en la guía de secuencias de comandos buscando cómo hacer esto aparentemente. concepto fácil... además, he tenido mucho éxito escribiendo otros scripts... pero honestamente, la guía de scripting me hace anhelar 20k adicionales en el presupuesto para una licencia SAS.
No soy un programador empedernido... Soy un ingeniero que solo intenta hacer las cosas rápido.
Re: SAS a JSL - Hacer bucles...gracias por la ayuda pmroz
Re: SAS a JSL - Hacer bucles...Guía del programador de C++ para JSL podría ser de alguna ayuda también. Intenta mostrar cómo la instrucción JSL for es realmente una función, y saber eso hará que sea mucho más fácil obtener la sintaxis correcta.
Re: SAS a JSL - Hacer bucles...Todo esto está cubierto en la Guía de secuencias de comandos, que recomiendo encarecidamente que lea.Está disponible en la Biblioteca de documentación de JMP, disponible en el menú desplegable Ayuda en JMP.
Re: SAS a JSL - Hacer bucles...Has venido al lugar correcto para obtener ayuda para aprender JSL.El índice de secuencias de comandos es su amigo, al igual que la documentación en línea.
Aquí hay un fragmento de código que hace lo que quieres:
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
);
);
);