根據另一個數據表中的數據更新列軸參考線我希望根據來自另一個數據能力的數據添加列參考線。 例如,使用“Big Class”將使用查找數據表中的 P50 和 P95 值更新列“weight”和“height”。
查找數據表上的行對應於主表中的列名。 參考線需要從查找表列名稱“P50”或“P95”中分配標籤值,並且該值來自該列中的行。
顯示添加的列軸參考線的示例:

查找數據表示例:

我不是很精通 JSL,所以我很感激在這個主題上得到的任何幫助。 我已經創建了一個腳本,但它沒有做我想要的。
它似乎損壞了列,有時在繪製分佈時它顯示所有 '0' 值。 此外,如果我嘗試添加 P50 和 P95 參考行,則只有最後一個會保存到列中,並將其保存在兩列中。
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 )
});
);
);
);
謝謝,
羅傑
腳本編寫回复:根據另一個數據表中的數據更新列軸參考線這是一個示例腳本。 我的猜測是,如果您嘗試這樣多次執行 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())在這裡是必要的,但它不會受到傷害。
回复:根據另一個數據表中的數據更新列軸參考線謝謝賈莫。 這個解決方案要簡單得多,但它似乎覆蓋了任何現有的軸參考線。 您知道是否有辦法保留該列中已經存在的任何軸參考線嗎?
回复:根據另一個數據表中的數據更新列軸參考線我不是 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)})));回复:根據另一個數據表中的數據更新列軸參考線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)
})));
);
);