Aktualisieren Sie die Spaltenachsen-Bezugslinie basierend auf Daten aus einer anderen DatentabelleIch möchte Spaltenreferenzzeilen basierend auf Daten aus anderen Daten hinzufügen. Ein Beispiel mit "Big Class" würde die Spalten "weight" und "height" mit P50- und P95-Werten aus einer Lookup-Datentabelle aktualisieren.
Die Zeilen in der Nachschlagedatentabelle entsprechen den Spaltennamen in der Haupttabelle. Die Referenzzeilen müssten den Labelwert aus dem Spaltennamen "P50" oder "P95" der Nachschlagetabelle zuweisen, und der Wert stammt aus der Zeile in dieser Spalte.
Beispiel mit den hinzugefügten Spaltenachsen-Referenzlinien:

Beispiel für eine Lookup-Datentabelle:

Ich kenne mich mit JSL nicht sehr gut aus, daher bin ich für jede Hilfe zu diesem Thema dankbar. Ich habe ein Skript erstellt, aber es tut nicht das, was ich will.
Es scheint die Spalte zu beschädigen, manchmal werden beim Plotten einer Verteilung alle '0'-Werte angezeigt. Wenn ich versuche, sowohl P50- als auch P95-Ref-Zeilen hinzuzufügen, wird nur die letzte in der Spalte gespeichert und in beiden Spalten gespeichert.
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 )
});
);
);
);
Dankeschön,
Roger
SkriptingBetreff: Spaltenachsen-Referenzlinie basierend auf Daten aus einer anderen Datentabelle aktualisierenHier ist ein Beispielskript. Ich vermute, dass die Achse überschrieben wird, wenn Sie dies mehrmals versuchen, sodass Sie sie möglicherweise in derselben << Set-Eigenschaft hinzufügen müssen (mehrere verschiedene Möglichkeiten, den Ausdruck dafür zu erstellen).
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)
}))
);
);

Nicht sicher, ob Auswerten(AuswertAusdr()) ist hier notwendig aber schadet nicht.
Betreff: Spaltenachsen-Referenzlinie basierend auf Daten aus einer anderen Datentabelle aktualisierenDanke Jarmo. Diese Lösung ist viel einfacher, aber sie scheint alle vorhandenen Achsenreferenzlinien zu überschreiben. Wissen Sie, ob es eine Möglichkeit gibt, bereits in dieser Spalte vorhandene Achsenreferenzlinien beizubehalten?
Betreff: Spaltenachsen-Referenzlinie basierend auf Daten aus einer anderen Datentabelle aktualisierenIch bin mir nicht 100% sicher, aber vielleicht könnten Sie zuerst die alten Axis-Eigenschaften mit << Get Propery("Axis") abrufen und dann hinzufügen.
Vielleicht so etwas (es könnte auch einfachere Wege geben):
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)})));Betreff: Spaltenachsen-Referenzlinie basierend auf Daten aus einer anderen Datentabelle aktualisierenWas macht die Funktion Insert() hier? Ich kann nicht scheinen, dass es funktioniert.
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)
})));
);
);