Aggiorna la linea di riferimento dell'asse della colonna in base ai dati di un'altra tabella di datiSto cercando di aggiungere linee di riferimento delle colonne in base ai dati di un altro dato in grado. Un esempio, l'utilizzo di "Big Class" aggiornerebbe le colonne "peso" e "altezza" con i valori P50 e P95 da una tabella di dati di ricerca.
Le righe nella tabella dei dati di ricerca corrispondono ai nomi delle colonne nella tabella principale. Le linee di riferimento dovrebbero assegnare il valore dell'etichetta dal nome della colonna della tabella di ricerca "P50" o "P95" e il valore proviene dalla riga in quella colonna.
Esempio che mostra le linee di riferimento dell'asse di colonna aggiunte:

Esempio per la tabella dei dati di ricerca:

Non sono molto esperto di JSL, quindi apprezzo qualsiasi aiuto mi venga in mente su questo argomento. Ho creato uno script ma non sta facendo quello che voglio.
Sembra corrompere la colonna, a volte quando si traccia una distribuzione mostra tutti i valori "0". Inoltre, se sto cercando di aggiungere entrambe le linee di riferimento P50 e P95, solo l'ultima viene salvata nella colonna e la salva su entrambe le colonne.
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 )
});
);
);
);
Grazie,
Roger
ScriptingRe: Aggiorna la linea di riferimento dell'asse della colonna in base ai dati di un'altra tabella di datiEcco uno script di esempio. La mia ipotesi è che l'asse venga sovrascritto se provi a farlo più volte in questo modo, quindi potresti dover aggiungerli nella stessa << Imposta proprietà (più modi diversi di costruire l'espressione per farlo).
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)
}))
);
);

Non so se Eval(EvalEspr()) è necessario qui ma non farà male.
Re: Aggiorna la linea di riferimento dell'asse della colonna in base ai dati di un'altra tabella di datiGrazie Jarmo. Questa soluzione è molto più semplice ma sembra sovrascrivere qualsiasi linea di riferimento dell'asse esistente. Sapete se c'è un modo per preservare le linee di riferimento dell'asse che sono già presenti in quella colonna?
Re: Aggiorna la linea di riferimento dell'asse della colonna in base ai dati di un'altra tabella di datiNon sono sicuro al 100%, ma forse potresti prima ottenere le vecchie proprietà Axis con << Ottieni proprietà ("Axis") e quindi aggiungerle.
Forse qualcosa del genere (potrebbero esserci anche modi più semplici):
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: Aggiorna la linea di riferimento dell'asse della colonna in base ai dati di un'altra tabella di datiChe cosa fa qui la funzione Insert()? Non riesco a farlo funzionare.
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)
})));
);
);