將項目從計算的統計數據傳遞到保存的數據表中的特定坐標我生成了幾個帶有計算統計數據的圖表。 我想傳遞特定的計算統計參數,例如最小值、中值和最大值分位數和標準差來自匯總統計使用 JSL 保存數據表中的特定坐標。
例如,我想繼續
- 第 5 行第 7 列的最小分位數
- 第 5 行第 8 列的中位數
- 第 5 行第 9 列的最大分位數
- 標準差到第 5 行第 10 列。
到我保存的數據表。 如何使用 JSL 實現此目的?
(開始保存的數據表中坐標為空)
數據表圖形腳本回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標謝謝。 這行得通。 來自 Matlab 和 C# 我仍然習慣 JSL 的思維方式。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標仔細看看你的代碼。您正在將 include 函數的返回值分配給 resultsdt。 該返回值是包含的文件所做的最後一件事,其計算結果為“H”。它不是數據表。
編輯:
要么 (1) 添加最後一行到 basicTable.jsl 說
resultsdt;
或(2)像這樣更改包含(添加評論)
/*resultsdt =*/ include ("basicTable.jsl");
我認為 (1) 似乎更接近您的期望。 它確保最後評估的是保存數據表的變量,然後作為 include() 的結果返回。
(2) 也可能會起作用,這取決於本地行為並使用相同的變量名。 我認為這將有點不可預測,具體取決於您是否在每個地方都使用 namesDefaultToHere 以及 resultsdt 是否已經存在。 不確定如果不進行測試將如何工作。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標該聲明
Column(resultsdt, "Column 1")[8] ="H";
只是傳遞一個參數名稱H到第 1 列的第 8 行。 另一種定義方式結果
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
resultsdt:Column 1[1] ="A";
resultsdt:Column 1[2] ="B";
resultsdt:Column 1[3] ="C";
resultsdt:Column 1[4] ="D";
resultsdt:Column 1[5] ="E";
resultsdt:Column 1[6] ="F";
resultsdt:Column 1[7] ="G";
resultsdt:Column 1[8] ="H";
使用時也不起作用
resultsdt = include ("basicTable.jsl");
但是,如果我將第 1 列留空,代碼運行正常。 解決此問題的任何幫助都是有用的。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標
resultsdt = include ("basicTable.jsl");
如果該文件是您顯示的內容,則問題是 resultsdt 不是數據表,而是(也許?)無論它的計算結果是什麼
Column(resultsdt, "Column 1")[8] ="H";
這可能是“H”。 include 函數的結果是最後計算的結果。 (與你的筆記一致。)
是的,錯誤消息沒有您希望的那麼有用。 @Audrey_Shull - 它應該指向 = 的左邊,而不是右邊。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標謝謝@Craige_Hales . 我現在對這個問題有了更好的理解。 但是仍然存在故障。 以下工作按預期進行
Names Default To Here (1);
delete symbols ();
clear log ();
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
//resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
但是,如果我定義結果分別如下
Names Default To Here (1);
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 8),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
Column(resultsdt, "Column 1")[1] = "A";
Column(resultsdt, "Column 1")[2] = "B";
Column(resultsdt, "Column 1")[3] = "C";
Column(resultsdt, "Column 1")[4] = "D";
Column(resultsdt, "Column 1")[5] = "E";
Column(resultsdt, "Column 1")[6] = "F";
Column(resultsdt, "Column 1")[7] = "G";
Column(resultsdt, "Column 1")[8] ="H";
然後如下調用它(這就是我設置實際代碼的方式)
Names Default To Here (1);
delete symbols ();
clear log ();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = getDistChart ("weight", 55, 185);
toPass= Report( dist )[Outline Box("weight" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box(1)]<< get (1);
resultsdt = include ("basicTable.jsl");
resultsdt[1, 2] = toPass;
//show (toPass);
我得到錯誤
Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[1, 2] = /*###*/toPass/*###*/
我哪裡錯了?
(我注意到,如果我根本不定義第 1 列中的條目,則上述兩種方法都可以正常工作)
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標2個問題,返回的局部變量從來沒有賦值過任何東西,需要將數據表傳遞給用戶函數。 像這樣的東西
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function( {dt, ColName, _LSL, _USL},
{distChart},
New Window( "" || ColName || " distribution",
distChart = dt << Distribution(
Stack( 1 ),
Continuous Distribution(
Column( As Column( ColName ) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL( _LSL ), USL( _USL ) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
)
);
Return( distChart );
);
dist = getDistChart( dt, "weight", 55, 185 );
在 JMP 中,<< 運算符是發送操作員並將消息(在右側)發送到腳本對象, 在左邊。 數據表 (dt) 是一個可編寫腳本的對象,但它不知道消息獲取DistChart . 它確實了解內置平台,例如分配. 腳本索引顯示數據表的所有消息名稱。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標@ron_horne . 以下內容應該有助於更清楚地說明問題,因為它與我的實際問題非常相似。 我通過一個函數得到分佈圖。
Names Default To Here (1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
getDistChart = Function({ColName, _LSL, _USL}, {distChart},
New Window(""||ColName||" distribution",
Distribution(
Stack( 1 ),
Continuous Distribution(
Column(As Column (ColName) ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Capability Analysis( LSL(_LSL ), USL(_USL) )
),
SendToReport(
Dispatch(
{},
"Distrib Histogram",
FrameBox,
{DispatchSeg( LabelSeg( 1 ), {Font( "Segoe UI", 7, "Plain" )} ),
DispatchSeg( LabelSeg( 2 ), {Font( "Segoe UI", 7, "Plain" )} )}
)
)
);
);
return(distChart);
);
dist = dt << getDistChart ("weight", 55, 185);
在我看來,最後一行似乎沒有做它應該做的從分佈中提取值的事情,因為首先沒有分佈被繪製。 現在的問題是,當通過上面的函數繪製分佈時,如何獲取計算統計值。 也許函數不是消息,所以不能使用 << 發送到對象?
任何幫助都會非常有用,因為我仍在學習 JMP。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標再次感謝@ron_horne ,但這兩個都不起作用,並給我同樣的錯誤。
您是說以下是正確有效的用法嗎? 注意是不密謀如果像下面那樣使用分佈(順便說一句,我不明白的功能距離在距離=dt ?)
Output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
和錯誤(從日誌中復制)
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , Output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/Not subscriptable value{8} in access or evaluation of 'Assign' , resultsdt[5, 9] = /*###*/Output[Outline Box( "Pass Distribution" ),
Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << /*###*/get( 1 ) /*###*/
/*###*/
我得到的是由於我的以下陳述(即使您在下面提出建議)
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
如果,是的,我想做一個簡單的測試並將更直接的東西傳遞給 resultsdt。 我可以做一個簡單的測試來測試我是否可以從輸出到數據表結果?
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標你好@尼奧,
如果我正確理解您的問題,您需要注意編號和地址。一旦使用了輪廓框的名稱,表格框和編號列框的編號就從 1 開始。
因此,請嘗試以下操作:
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1)] << get( 1 ); // max
如果你想使用 Number Col Box (11) 試試這個:
resultsdt[5, 9] = Output[Number Col Box( 11)] << get( 1 ); // max
希望這現在有效。
通常,有很多更奇特的方法可以讓腳本使用 xpath () 或模式匹配找到感興趣的值的位置,如以下鏈接所示: http://www.pega-analytics.co.uk/blog/oneway-advisor-step-3/
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標謝謝@ron_horne . 讓我試著概述一下我正在嘗試做的事情。 我的主要腳本具有以下(此處已簡化)流程。
打開一個數據表(並將其命名為dt ), 然後使用函數繪製其中幾列的分佈圖
getDistribution ("ColName", "LSL", "USL", "other input parameters")
每個生成的分佈圖都有“分位數”、“匯總統計”和“能力分析(關閉輪廓)”。
主腳本的下一部分是創建一個表(我們稱之為結果) 有幾行和幾列,我需要在其中傳遞計算統計值,如原始帖子中所示。
但是,以下不起作用。
output = Report( dist = dt << getDistribution("ColName", "LSL", "USL", "other input parameters") );
resultsdt[5, 9] = Output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 6 ), Number Col Box( 11)] << get( 1 ); // max
我已經確定 Table Box () 和 Number Col Box () 中的數字是正確的。 我收到以下錯誤
Send Expects Scriptable Object{8} in access or evaluation of 'Send' , output[Outline Box( "height" ), Outline Box( "Quantiles" ),
Table Box( 6 ), Number Col Box( 11 )] << /*###*/get( 1 ) /*###*/
我哪裡錯了?
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標嗨尼奧,
您對 distb 的引用不起作用,因為 distb 不是任何報告層。它是分析層。 在 JMP 中,它們之間存在差異。
為了從輸出中提取任何內容,您需要明確引用報告層。
看到這個:將分析中的統計數據提取到報告中如果您有多個輸出,則需要正確命名和定義它們,以確保獲得您想要的值。
讓我們知道它是否有效。否則,請考慮從給您帶來問題的角度提供一些文件和腳本。
一切順利,
羅恩
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標@ron_horne . 謝謝。 我花了一些時間重新編碼,這樣我就可以擁有可以將計算統計值的“結果表”傳遞給它。
我已經從你的建議開始,並向上帝提問。 為什麼這不起作用?
distb = Distribution( Continuous Distribution( Column( :height ) ) ) ;
// Extract min median max and SD
resultsdt[5, 7] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = distb[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = distb[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
為什麼一定要這樣?
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
我有多個分佈圖,我可以輕鬆地為它們分配一個名稱,例如 distb1、distb2……但是如果我需要的話
output = Report( dist = dt << Distribution( ..... ) );
我將需要檢查這如何影響我的其餘代碼。
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標
你好@尼奧
據我所知,JMP 無法將數據設置到已關閉表格的單元格中。
如果這裡的其他人知道得更多,請告訴我們。
也許您可以打開另一個表作為中介,以便在您仍在收集時將信息保存在那裡,並且僅在最後打開最終結果表。
羅恩
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標謝謝@ron_horne . 我認為這會起作用。 但是,在解決我的實際問題之前,我有一個問題。 “結果表”是否需要在將值傳遞給它之前打開?
在我的例子中,“結果表”是一個保存的文件,我不打算打開它,除非不可能將值傳遞給它。
(如果我需要在將值傳遞給實例時打開“結果表”,我將需要更改其餘代碼)
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標你好@尼奧
看看你是否可以從這個腳本中提取你需要的東西
Names Default To Here( 1 );
// set up a table to accept the results
resultsdt = New Table( "Results Table",
Add Rows( 20 ),
New Column( "Column 1" ),
New Column( "Column 2" ),
New Column( "Column 3" ),
New Column( "Column 4" ),
New Column( "Column 5" ),
New Column( "Column 6" ),
New Column( "Min", Numeric ),
New Column( "Median", Numeric ),
New Column( "Max", Numeric ),
New Column( "SD", Numeric )
);
// Open Data Table: Big Class.jmp
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Launch platform: Distribution
output = Report( dist = dt << Distribution( Continuous Distribution( Column( :height ) ) ) );
// Extract min median max and SD
resultsdt[5, 7] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 11 ); // min
resultsdt[5, 8] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 6 ); // median
resultsdt[5, 9] = output[Outline Box( "height" ), Outline Box( "Quantiles" ), Table Box( 1 ), Number Col Box( 1 )] << get( 1 ); // max
resultsdt[5, 10] = output[Outline Box( "height" ), Outline Box( "Summary Statistics" ), Number Col Box( 1 )] << get( 2 ); // Std dev.
當談到從輸出中提取數字時,需要小心。 如果輸出因偏好而不同或僅在一個窗口中包含多個輸出,則對位置的正確引用可能會發生變化。
讓我們知道它是否有效。
羅恩
回复:將項目從計算的統計數據傳遞到保存的數據表中的特定坐標我認為數據表下標可以幫助你
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[10,3] = "AAAAAAAAAAAAAA";