Lo primero que desearía haber sabido cuando comencé a crear scripts: hay diferentes tipos de scripts.¡Una vez más en la brecha!
Estuve hablando con mi papá hace unas semanas. No para salir con él, pero ha estado usando JMP desde la versión 1.0. Recuerdo haber visto los discos de 3,5” junto a nuestro Mac II-se cuando estaba aprendiendo a usar un mouse por primera vez. La misma máquina estuvo en exhibición en la conferencia Discovery Summit 2019 en Tucson, Arizona. Aquí hay una foto de eso:

De todos modos, mi papá y yo estábamos discutiendo mi primera serie de blogs Five Things . Mencionó que le gustaría que alguien escribiera una serie sobre cómo empezar a escribir scripts en JMP. En ese momento, ya estaba en el proceso de escribir otros artículos, así que lo guardé para un proyecto futuro. La vida, sin embargo, tenía otros planes. Una semana después, me pidieron que ayudara con una presentación para un cliente y, para mi sorpresa, ¡uno de los temas que querían que cubriera era una introducción a la creación de guiones! El universo ama las bromas, aparentemente.
De todos modos, ¡aquí vamos de nuevo! Siguiendo el formato de mi primera serie Five Things, estas son las cinco cosas que creo que todos deberían saber cuando comienzan a escribir un guión. Primero, un pensamiento conceptual.
Ver una necesidad, llenar una necesidad
Antes de comenzar a crear secuencias de comandos, debe considerar la necesidad. Lo más probable es que, si quieres escribir un guión, haya alguna razón. Tal vez lo estés haciendo para ser más eficiente en el trabajo. Tal vez esté buscando estandarizar métodos analíticos para un grupo. O tal vez usted es, de hecho, una de esas raras personas que decidieron recogerlo por sonrisas y risitas. Ninguna de estas son malas razones, aunque la última puede hacer las cosas un poco más difíciles (explicaré por qué en un momento). El punto es que debes tener una razón en tu cabeza y un propósito específico para tu primer guión.
Hay guiones, y luego hay guiones
Hay, en mi opinión de todos modos, dos tipos diferentes de scripts: los que actúan sobre los datos existentes y los que crean datos. Los scripts que funcionan con datos existentes interactúan con una tabla de datos y plataformas existentes en JMP para crear una nueva salida definida por el usuario. Estos pueden ser cosas tan simples como ajustar una ventana alrededor de varios informes o tan complejas como un informe personalizado en Application Builder. El punto en común clave es que los scripts como este son modificar contenido existente .
El segundo grupo son scripts que crean datos. Los scripts que crean datos pueden ser herramientas de simulación, gráficos personalizados, herramientas para administrar metadatos en un archivo JMP, etc. Este grupo es un poco más confuso, pero el tema común es que los scripts amplían JMP más allá de enriquecer los datos o análisis existentes. La mayoría de las veces, estos scripts van a crear contenido nuevo desde cero
Las secuencias de comandos que modifican el contenido existente son generalmente donde las personas comienzan cuando piensan en aprender el lenguaje de secuencias de comandos JMP (JSL). Aquí es también donde vamos a comenzar nuestra discusión. Entonces, demos un paso atrás y pensemos por qué estás interesado en aprender JSL.
Dame una frase, Vasily. Una sola frase, por favor.
Tómate un momento y piensa en tu necesidad . ¿Qué punto de dolor espera abordar con JSL? ¿Ves ahora por qué escribir guiones para sonrisas y risas (al menos al principio) puede ser complicado? Es mucho más probable que luches contra la curva de aprendizaje si tienes una razón para llegar a la cima. No digo que no puedas elegir a JSL por el gusto de hacerlo, solo que la lucha es más difícil sin la motivación adicional.
El próximo paso, y el último que vamos a cubrir en este episodio, es lo que haces con esa necesidad. La respuesta simple es que vas a hacer dos cosas. Primero, vas a escribir esa idea (posiblemente nebulosa) que te está impulsando a aprender JSL en una sola oración: una declaración del problema. Y, quiero decir solo una oración. Asegúrate de poder cristalizar la idea en algo tangible sobre lo que puedas construir. También ayudará a controlar el avance del alcance. Aquí hay unos ejemplos:
- Quiero automatizar toda la generación de gráficos para mi informe semanal en un solo script.
- Quiero automatizar el trabajo de formateo para una tabla de datos proporcionada por el cliente.
- Quiero generar un conjunto de gráficos de control a partir de un archivo de datos proporcionado por el sistema informático de mi fábrica.
Tenga en cuenta que no estoy hablando de detalles; Simplemente estoy indicando el punto de dolor que me hace mirar a JSL. Y entonces dejé de escribir.
Haz tu lista de tareas pendientes
¿Tienes el enunciado de tu problema? ¡Bien! Ahora vamos a escribir una serie de entregables específicos para su guión. Será nuestra lista de verificación para ayudarnos a localizar los recursos que SAS brinda para aprender JSL. No enumere ninguna interfaz gráfica de usuario (GUI) o interfaz de usuario (UI) específicamente. Enumere las acciones que debe realizar el script. Aquí hay ejemplos para las declaraciones de problemas anteriores:
Declaración del problema 1: Quiero automatizar toda la generación de gráficos para mi informe semanal en un solo script.
Lista de verificación:
- Extraiga un conjunto de datos de nuestra base de datos de producción que contenga los datos de las últimas tres semanas.
- Hacer un gráfico de tiempo vs temperatura para mi producto.
- Ejecute un análisis de tiempo frente a temperatura utilizando un modelo polinomial.
- Exporte los gráficos y los informes a un archivo de PowerPoint.
Declaración del problema 2: Quiero automatizar el trabajo de formateo para una tabla de datos proporcionada por el cliente.
Lista de verificación:
- Cambie el nombre de las columnas según los estándares internos (usando la tabla de especificaciones).
- Asigne unidades a las columnas necesarias (usando la tabla de especificaciones).
- Convierte Lat y Long a coordenadas geográficas.
- Cambiar unidades defectuosas columna de continuo a ordinal .
Declaración del problema 3: Quiero generar un conjunto de gráficos de control a partir de un archivo de datos proporcionado por el sistema informático de mi fábrica.
Lista de verificación:
- Importar datos desde la ubicación de la red.
- Asigne límites de especificación.
- Construir gráficos de control.
Tenga en cuenta aquí que no me estoy encajonando demasiado. Solo estoy creando una lista de cosas que necesito que haga el guión. Dado que asumo que nunca antes ha trabajado en JSL, también asumo que no sabe cómo abordará estos problemas. Al escribirlos, sabe lo que necesita buscar en la ayuda y los recursos. Que es donde continuaré en la próxima entrega de esta serie.
Pensamiento final para esta semana
Dado que esta serie durará unas pocas semanas, decidí hacerla más una serie de trabajo en conjunto que algo que acabas de leer. Entonces, tome estos últimos puntos que hice como tarea. Si desea alguna rendición de cuentas o comentarios, póngalos en los comentarios a continuación. Intervendré si puedo ayudar o le haré saber si es posible que se esté metiendo en problemas en el futuro.
Para obtener puntos de bonificación, abra una ventana de secuencia de comandos en JMP ( Archivo > Nuevo > Script ) y coloque la declaración del problema y las viñetas en la ventana del script, una por línea con una barra inclinada doble ("//") al comienzo de la línea. Es posible que vea que el color del texto cambia a verde para esas líneas en el Editor de secuencias de comandos JSL. Cubriremos lo que acabas de hacer en un próximo episodio.
Ah, y si te preguntas quién es Vasily y por qué debería darte una oración singular, échale un vistazo. aquí .

Hay dos tipos diferentes de scripts: los que actúan sobre datos existentes y los que crean datos.
Re: Lo primero que desearía haber sabido cuando comencé a crear scripts: hay diferentes tipos de scripts¡Gran pensamiento! Eche un vistazo a la parte 2 de la serie para obtener ayuda adicional: La segunda cosa que desearía haber sabido cuando comencé a crear secuencias de comandos: Obtener ayuda
Mejor,
METRO
Re: Lo primero que desearía haber sabido cuando comencé a crear scripts: hay diferentes tipos de scriptsBuenos pensamientos.Para aprender JMP, la nueva edición de Saltar a secuencias de comandos JMP , de Murphrey y Lucas me resultó útil.
Re: Lo primero que me hubiera gustado saber cuando empecé a programar scripts: Hay diferentes tipos de scripts.Mi lenguaje de programación principal es SAS. Data Step, lenguaje de macros, proc SQL, proc IML, así que en realidad no es un solo lenguaje, pero vi un curso corto sobre JMP y me interesó de inmediato. ¿Por qué? Con los años he llegado a la conclusión de que en realidad solo hay dos cosas importantes.
1. Inicialmente pregunté si su software le daba la respuesta correcta, pero lo cambié a si su software le daba una respuesta que pudiera defender cuando fuera cuestionada o criticada.
2. ¿Qué tan rápido puedes obtener la respuesta en 1.?
Inicialmente solo utilizaba las funciones de apuntar y hacer clic de JMP, pero me he dado cuenta de que necesito aprender algo de JSL para ser realmente más eficiente al usar JMP.
Por ejemplo, les estoy mostrando a mis estudiantes cómo usar k-NN para predecir una variable de respuesta continua. Hay 12 predictores posibles (una mezcla de variables continuas y nominales) con una variable de respuesta continua y una variable de validación. Quiero mostrar cómo cambian el R² , el RASE y el AAE a medida que se eliminan predictores. Esto requiere una ejecución con 12 predictores, luego con 11, ... hasta una ejecución final con dos predictores. De tu tercera publicación en esta serie de blogs aprendí sobre la ventana nueva.
New Window("My Window",
// Launch platform: K Nearest Neighbors 12 Variables
Data Table( "Boston Housing Plus Validation Column" ) <<
K Nearest Neighbors(
Validation( :Validation ),
Y( :MEDV ),
X(:CRIM, :ZN, :INDUS, :CHAS, :NOX, :RM, :AGE, :DIS, :RAD, :TAX, :PTRATIO, :LSTAT),
K( 20 )
);
additional analyses with 10 predictors down to last run with 2. So, a total of 11 analyses.
);
La opción "Nueva ventana" muestra los resultados en una sola ventana, en lugar de las 11 ventanas que se obtendrían al ejecutar k-NN con 11 listas diferentes de predictores. Luego, puedo hacer clic derecho en la tabla de resultados, seleccionar "Crear tabla de datos combinada" y así tengo los resultados de los 11 análisis en una sola tabla.
Creo que es obvio que necesito convertir el código con 11 análisis diferentes (de 12 predictores a 2) en un bucle. Ese es mi siguiente paso para aprender sobre JSL.
JMP jsl principiante.
Gracias por tus publicaciones. Estoy usando JMP Student 19 en una computadora con Windows.
John
Re: Lo primero que me hubiera gustado saber cuando empecé a programar scripts: Hay diferentes tipos de scripts.@jkeighley , ¡gracias por tus amables palabras! Me alegra que la serie te haya resultado útil. Es un tema un poco complejo, pero échale un vistazo a este ejemplo... podría darte algunas ideas sobre cómo estructurar el nuevo informe (el índice de scripts debería ayudarte con algunos detalles):
Names Default To Here( 1 );
Clear Log();
// data table goes here
dt = Open( "$Sample_Data/penguins.jmp" );
// report names go here (this is what the tabs will be named)
reportNames = {"report 1", "report 2", "report 3", "report 4", "report 5"};
// jsl for each tab's contents go here. One tab per Expr() call. They
// should be in the same order as the report names.
reportScripts = {Expr(
dt << Scatterplot 3D(
Y( :Culmen Length, :Culmen Depth, :Flipper Length ),
Coloring( :Species ),
Normal Contour Ellipsoids( 1, :Species ),
Nonpar Density Contour( 1, :Species ),
Legend( 1 ),
Frame3D(
Set Graph Size( 655, 672 ),
Legend( 1 ),
Set Grab Handles( 0 ),
Set Rotation( -72.1900689453449, -1.75327107936844, 34.4563606108469 )
),
SendToReport( Dispatch( {}, "Density Contour Controls", OutlineBox, {Close( 1 )} ) )
)
), Expr(
dt << Hierarchical Cluster(
Y( :Culmen Length, :Culmen Depth, :Flipper Length, :Body Mass, :Delta 15 N, :Delta 13 C ),
Label( :Species ),
Method( "Centroid" ),
Standardize By( "Columns" ),
Color Clusters( 1 ),
Show Dendrogram( 0 ),
Dendrogram Scale( "Distance Scale" ),
Number of Clusters( 4 ),
Constellation Plot( 1 ),
Cluster Summary( 1 )
)
), Expr(
dt << Graph Builder(
Size( 662, 560 ),
Show Control Panel( 0 ),
Variables( X( :Species ), Y( :Culmen Length ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
)
), Expr(
dt << Graph Builder(
Size( 662, 552 ),
Show Control Panel( 0 ),
Variables( X( :Body Mass ), Y( :Flipper Length ), Overlay( :Species ) ),
Elements( Points( X, Y, Legend( 13 ) ), Contour( X, Y, Legend( 16 ), Contour Type 2D( "HDR" ) ) ),
SendToReport(
Dispatch( {}, "Graph Builder", FrameBox,
{DispatchSeg( Contour Seg( "Contour (Adelie penguin (Pygoscelis adeliae))" ), {Line Color( {230, 159, 0} )} ),
DispatchSeg( Contour Seg( "Contour (Chinstrap penguin (Pygoscelis antarctica))" ), {Line Color( {86, 180, 233} )} ),
DispatchSeg( Contour Seg( "Contour (Gentoo penguin (Pygoscelis papua))" ), {Line Color( {0, 158, 115} )} )}
)
)
)
), Expr(
dt << Fit Group(
Bivariate( Y( :Flipper Length ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Flipper Length ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Length ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
Bivariate( Y( :Body Mass ), X( :Culmen Depth ), Nonpar Density( {Contour Fill( 1 ), Color Theme( "Spectral" )} ) ),
<<{Arrange in Rows( 2 )}
)
)};
// I'm creatng an Associative array to manage the looping for me
reports = Associative Array( reportNames, reportScripts );
// build the window wrapper
nw = New Window( "Example Report", tb = Tab Box() );
// loop through the AA and append each tab page box to the tab box in the report
For Each( {{k, v}, i}, reports, tb << Append( Tab Page Box( Title( k ), Eval( v ) ) ) );
// set the view back to the first report.
tb << Set Selected( 1 );