Actualizar la línea de referencia del eje de la columna en función de los datos de otra tabla de datosEstoy buscando agregar líneas de referencia de columna basadas en datos de otros datos capaces. Un ejemplo, el uso de "Clase grande" actualizaría las columnas "peso" y "altura" con los valores P50 y P95 de una tabla de datos de búsqueda.
Las filas de la tabla de datos de búsqueda corresponden a los nombres de las columnas de la tabla principal. Las líneas de referencia necesitarían asignar el valor de etiqueta del nombre de columna de la tabla de búsqueda "P50" o "P95" y el valor es de la fila de esa columna.
Ejemplo que muestra las líneas de referencia del eje de columna agregadas:

Ejemplo de tabla de datos de búsqueda:

No estoy muy versado en JSL, por lo que agradezco cualquier ayuda que se me presente sobre este tema. He creado un guión pero no está haciendo lo que quiero.
Parece corromper la columna, a veces al trazar una distribución muestra todos los valores '0'. Además, si estoy tratando de agregar líneas de referencia P50 y P95, solo la última se guarda en la columna y la guarda en ambas columnas.
dt = Open ("C:\Program Files\SAS\JMP\15\Samples\Data\big class.jmp");
dtLookup = New Table( "Lookup Table",
Add Rows( 2 ),
New Column( "Column Name",
Character,
Nominal,
Set Values( {"weight", "height"} )
),
New Column( "P50",
"Continuous",
Set Values( [100, 61] )
),
New Column( "P95",
"Continuous",
Set Values( [120, 70] )
)
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
numRowsLookup = N Rows( dtLookup );
numColsLookup = N Cols( dtLookup );
for(n=1,n<=numRowsLookup,n++,
col_name = dtLookup[n,1];
If(contains(col_name_list,col_name),
for(j=2,j<=numColsLookup,j++,
col = Column(dt, col_name);
col_name_Lookup = col_name_list_lookup[j];
value = Column(dtLookup,col_name_Lookup)[n];
col <<
Set Property("Axis",
{
//Add Ref Line( 63, "Dashed", "Orange", "P50", 2 )
Add Ref Line( value, "Dashed", "Orange", col_name_Lookup, 2 )
});
);
);
);
Gracias,
Roger
ScriptingRe: Actualizar la línea de referencia del eje de la columna en función de los datos de otra tabla de datosAquí hay un script de ejemplo. Supongo que el eje se anula si intenta hacerlo varias veces así, por lo que es posible que deba agregarlos en la misma << Establecer propiedad (múltiples formas diferentes de construir la expresión para hacerlo).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
For Each Row(dtLookup,
col_name =:"Column Name"n;
//because we know we have only two lines to add and they are always added
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis", {
Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
}))
);
);

No estoy seguro si Eval (EvalExpr ()) es necesario aquí pero no dolerá.
Re: Actualizar la línea de referencia del eje de la columna en función de los datos de otra tabla de datosGracias Jarmo. Esta solución es mucho más simple pero parece sobrescribir cualquier línea de referencia de eje existente. ¿Sabe si hay alguna forma de conservar las líneas de referencia del eje que ya están presentes en esa columna?
Re: Actualizar la línea de referencia del eje de la columna en función de los datos de otra tabla de datosNo estoy 100% seguro, pero tal vez primero pueda obtener las antiguas propiedades de Axis con << Get Propery ("Axis") y luego agregarlas.
Tal vez algo como esto (también podría haber formas más simples):
old_properties = Column(dt, "height") << get property("Axis");
old_with_new = Insert(old_properties, Expr(Add Ref Line(1, "Dashed", "Orange", "P45", 2)));
Eval(EvalExpr(column(dt, "height") << Set Property("Axis",{expr(old_with_new)})));Re: Actualizar la línea de referencia del eje de la columna según los datos de otra tabla de datos¿Qué hace aquí la función Insert()? Parece que no puedo hacerlo funcionar.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dtLookup = New Table("Lookup Table",
Add Rows(2),
New Column("Column Name", Character, Nominal, Set Values({"weight", "height"})),
New Column("P50", "Continuous", Set Values([100, 61])),
New Column("P95", "Continuous", Set Values([120, 70]))
);
col_name_list = dt << get column names(string);
col_name_list_lookup = dtLookup << get column names(string);
For Each Row(dtLookup,
col_name =:"Column Names"n;
If(contains(col_name_list,col_name),
old_properties = Column(dt, col_name) << get property("Axis");
old_with_new = Insert(old_properties,
{Expr( Add Ref Line(Expr(:P50), "Dashed", "Orange", "P50", 2),
Add Ref Line(Expr(:P95), "Dashed", "Orange", "P95", 2)
)
});
Eval(EvalExpr(Column(dt, col_name) << Set Property("Axis",{
Expr(old_with_new)
})));
);
);