<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Soy un usuario de SAS desde hace mucho tiempo que utiliza variables de macro para actuar como marcadores de posición para cadenas utilizadas repetidamente en un programa como ruta, nombre de archivo, columnas de matriz, etc.
¿Tiene JSL una funcionalidad similar?
Un par de ejemplos serían muy apreciados.
También. tenga en cuenta que puede poner bloques de código en expresiones (que podrían colocarse en archivos externos e incluirse si fuera necesario). Entonces puedes usar 'Substitute ()':
Nombres predeterminados aquí ( 1 ) ;
código de bloqueo = Expr ( Impresión ( "Macro variable es" || Carbonizarse ( una% ))) ;
Evaluar ( Sustituir ( NombreExpr ( código de bloqueo ) , Expr ( una% ) , 10 )) ;
Evaluar ( Sustituir ( NombreExpr ( código de bloqueo ) , Expr ( una% ) , 20 )) ;
Aquí hay un ejemplo más simple que aborda más directamente la idea de un marcador de posición para cadenas. Así que no hay un equivalente directo de las variables de macro SAS, pero puede lograr lo mismo con las variables JSL haciendo su propia concatenación usando el "||" operador de concatenación ("+" no se utiliza para concatenar cadenas en JMP):
ruta = "c: \ users \ public \ temp \";
dt1 = Abrir (ruta || "bc_mcv.jmp");
dt2 = Abrir (ruta || "airports_by_state.jmp");
Espero que esto ayude.
Eric
Gracias, Ian. Eso me señaló en la dirección correcta.
Estoy usando JMP y SAS de manera complementaria.
El lenguaje SAS y JSL son muy diferentes en sintaxis, estructura e intención (reflejando la naturaleza muy diferente del Sistema SAS y JMP).
Probablemente, el paralelo más cercano sería la capacidad de definir funciones en JSL, y los argumentos que se pasan son análogos a los valores de las variables macro. Un ejemplo podría ser:
NombresDefaultToHere ( 1 ) ;
// Dada una tabla y una columna en ella, hace una Distribución y devuelve una referencia a
// el objeto resultante
doDistribución =
Función ({ en mesa , inCol } , { Predeterminado local } ,
esta distribucion = en mesa << Distribución ( Columna ( inCol ))
) ;
// abrir una mesa
dt = Abierto ( "$ SAMPLE_DATA / Big Class.jmp" ) ;
// Haz una distribución y ciérrala.
mi distribución = doDistribución ( dt , Columna ( dt , "altura" )) ;
Espere ( 3 ) ;
Informe ( mi distribución ) << Cerrar ventana ;
Espere ( 3 ) ;
// Hacer dos distribuciones y cerrarlas en orden inverso.
dist1 = doDistribución ( dt , Columna ( dt , "peso" )) ;
Espere ( 3 ) ;
dist2 = doDistribución ( dt , Columna ( dt , "altura" )) ;
Espere ( 3 ) ;
Informe ( dist2 ) << Cerrar ventana ;
Espere ( 3 ) ;
Informe ( dist1 ) << Cerrar ventana ;
Dado el título del hilo, me siento obligado a mencionar también que no tiene sentido que SAS y JMP estén en oposición. De hecho, JMP y SAS interactúan muy bien, cuando el caso de uso a mano lo exige.