別のデータテーブルのデータに基づいて列軸の参照線を更新する別のデータからのデータに基づいて列参照行を追加したいと考えています。 たとえば、「Big Class」を使用すると、「weight」列と「height」列がルックアップデータテーブルのP50値とP95値で更新されます。
ルックアップデータテーブルの行は、メインテーブルの列名に対応しています。 参照行は、ルックアップテーブルの列名「P50」または「P95」からラベル値を割り当てる必要があり、値はその列の行からのものです。
追加された列軸参照線を示す例:

ルックアップデータテーブルの例:

私はJSLにあまり精通していないので、このトピックに関して助けてくれたことに感謝します。 スクリプトを作成しましたが、希望どおりに動作しません。
列が破損しているようです。分布をプロットすると、すべての「0」値が表示されることがあります。 また、P50とP95の両方の参照行を追加しようとすると、最後の1つだけが列に保存され、両方の列に保存されます。
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 )
});
);
);
);
ありがとうございました、
ロジャー
スクリプティングRe:別のデータテーブルのデータに基づいて列軸参照線を更新しますスクリプトの例を次に示します。 私の推測では、そのように複数回実行しようとするとAxisがオーバーライドされるため、同じ<< Set Property(それを実行するための式を構築する複数の異なる方法)にそれらを追加する必要があるかもしれません。
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)
}))
);
);

かどうか分からないEval(EvalExpr())ここでは必要ですが、痛くはありません。
Re:別のデータテーブルのデータに基づいて列軸参照線を更新しますジャルモに感謝します。 この解決策ははるかに簡単ですが、既存の軸参照線を上書きするようです。 その列にすでに存在する軸参照線を保持する方法があるかどうか知っていますか?
Re:別のデータテーブルのデータに基づいて列軸参照線を更新します100%確信はありませんが、最初に<< Get Propery( "Axis")を使用して古いAxisプロパティを取得してから、それに追加することができます。
たぶんこのようなもの(もっと簡単な方法もあるかもしれません):
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:別のデータテーブルのデータに基づいて列軸の参照線を更新しますここでInsert()関数は何をしていますか? うまくいかないようです。
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)
})));
);
);