Los mejores consejos para secuencias de comandosHola comunidad,
Comencé el curso de scripting que Monica Beals ayudó a realizar: Introducción al lenguaje de scripting JMP - JMP User Community
Todavía estoy aprendiendo, pero tengo una pregunta básica.
¿Cuál es un comando/consejo de secuencia de comandos que cree que todos deberían conocer o uno que desearía conocer antes?
por ejemplo: El pickfile es bueno para que la gente lo conozca, ya que le permite seleccionar cualquier archivo en el que desee ejecutar un conjunto de comandos.
Re: Los mejores consejos para secuencias de comandosTres cosas que desearía haber sabido antes:
- Open() a menudo permite que un scripter omita la secuencia de comandos Pick File()
- Alt+doble clic en cualquier función en la ventana de secuencia de comandos lo lleva directamente al índice de secuencias de comandos para esa función
- Crear secuencias de comandos para la capa del informe es más fácil de lo que parece, especialmente con la reciente incorporación de la sección Ruta del cuadro del visor de Propiedades:
-

Re: Los mejores consejos para secuencias de comandosAgregaré 3 a los tres de @Jed_Campbell :
- Bajo ninguna circunstancia se debe utilizar la Tabla de datos actuales para configurar la tabla de datos actual. Se debe acceder a las tablas explícitamente a través de una referencia de variable instanciada cuando se crea la tabla. A muchos programadores les resulta difícil realizar un seguimiento de qué tabla es la tabla actual, especialmente cuando hay muchas uniones , pilas o subconjuntos . Además de esto, la tabla que se establece como la tabla actual ha cambiado a lo largo de los años dependiendo de la operación. He visto que esto ha provocado que se rompan más scripts que probablemente cualquier otra cosa.
- No te metas con SendToReport . Sus características no están bien documentadas y (¿casi?) siempre hay un mensaje que hace el trabajo más fácilmente y hace que su código sea más legible.
- Aprenda a utilizar el manejo de expresiones ( Substitute , Eval , Expr y Name Expr ). @joseph_morgan ( aquí ) y @drewfoglia ( aquí y aquí ) tienen material de Discovery que hace un gran trabajo al hablar sobre este concepto. Tengo dos recetas en el libro de cocina de JSL que lo mencionan aquí y aquí ). Es un tema difícil de entender con claridad. Sin embargo, una vez que lo domines, podrás hacer cosas que no serían posibles de otra manera. Si no se puede hacer con el manejo de expresiones, no se puede hacer en JSL.
Re: Los mejores consejos para secuencias de comandosNo quiero descartar nada de lo que ya se ha dicho, pero el punto 3 de @DonMcCormack es lo más importante que puedes aprender a continuación. El manejo de expresiones es increíblemente poderoso y le brinda acceso a capacidades en JSL que son asombrosas. Una vez que te das cuenta de que todo en JSL es una expresión, empiezas a mirar tus scripts de forma completamente diferente. Estudiaría los materiales de Joseph y Drew y luego trabajaría en sus ejemplos.
Después de eso, mis favoritos personales son:
- Los nuevos bucles For Each() (y sus parientes, Filter Each() y For Each Row()). A menos que necesite un script para ejecutar versiones JMP realmente antiguas, olvidaría que existe el antiguo bucle For().
- Relacionado con 1, la versión abreviada de la función de índice: es decir, 1::10::2 crearía un vector comenzando en 1 contando hasta 10 de 2 (le daría 1,3,5,7,9) que podría usarse en el bucle For Each().
- La matriz asociativa y cómo trabajar con ella (incluido cómo la trata el bucle For Each()).
- Aprender a usar matrices en lugar de tablas de datos para todo lo posible (y cómo usarlas con el bucle For Each()).
Re: Los mejores consejos para secuencias de comandosYa que eres nuevo:
- Punto y coma. Si algo se rompe en JMP (o SAS), mire aquí primero. Solución fácil y casilla para marcar, y con mucha frecuencia el culpable. Paréntesis y corchetes a continuación. [1b. El registro a menudo no puede representar adecuadamente estas oraciones continuas. Por lo general, mire también las líneas de código anteriores.]
- Utilice Print() generosamente mientras crea/prueba su script. “¿Es esta variable el valor que espero en esta etapa del ciclo?”: Print(“Varname: ” || varname). "¿En qué etapa está suspendido el proceso (por ejemplo, bucle infinito)?" Imprimir ("Terminado el paso 3, antes del paso 4"). [2b: si es probable que el proyecto siga creciendo, cree una variable para usar como indicador (0/1 o T/F) y utilice declaraciones If() para activar sus declaraciones Print() cuando desee depurar. .]
- Al igual que el Departamento de Energía, empiece poco a poco. Por ejemplo, si desea ejecutar 100 elementos a través de un bucle For Each(), pruebe el bucle utilizando solo los primeros 2-4. Ahorre la espera y los posibles bloqueos.
Mike también tiene una serie de blogs que amplían sus pensamientos aquí: https://community.jmp.com/t5/JMPer-Cable/The-1st-thing-I-wish-I-knew-when-I-started-scripting- Hay-hay/ba-p/276580
En cuanto a las funciones Eval/Expr, todavía no he escrito suficiente JSL para sentirme cómodo con ellas. Pero nada en mi experiencia en codificación ha sido tan trascendental como poder usar & (y &&&... ¡bonitos recuerdos!) en la función de macros de SAS y hasta ahora he pensado en Eval/Expr como el paralelo de JSL. (Contexto: la mayor parte de mi carrera anterior a JMP fue programación SAS, pero he incursionado en otras cosas).
Re: Los mejores consejos para secuencias de comandosTu elemento número uno me recuerda un gran truco que todos deberían saber: Ctrl-[ selecciona todo lo que está entre paréntesis. Esto es muy útil para depurar, verificar que esté completo y especialmente para modificaciones de código (copiar/pegar/reemplazar).