嘗試從列中提取規格限制<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我正在嘗試提取列規格限制,以便可以在自訂報告中使用,但我遇到了一些奇怪的行為。 以下是我正在做的事情的一個片段:
清除全域變數();
dt = 資料表(“blah”);
cols1 = dt << 取得列名(數字,連續);
For( jj = 1, jj <= N 項( cols1 ), jj++,
spec_x = cols1[jj] << Get Property( "規格限制" );
列印(
字元( jj ) || “:列是” || Char( cols1[jj] << 取得名稱 ) ||
”,LSL 是“ ||字元(spec_x [“lsl”])||
”,USL 是“ ||字元(spec_x [“usl”])
);
);
列印語句不是真正的最終用途,但它可以顯示我是否以有用的方式提取了限制!
現在,這段程式碼適用於 2 列的小型測試表:
“1:Col 為 X,LSL 為 1,USL 為 2”
“2:Col 為 Y,LSL 為 3,USL 為 7”
這與我表中的內容相符。 但對於包含 73 列(數字、連續)的較大表,由於某種原因,它無法將任何內容放入 spec_x 中,我只是得到:
“1:Col 為 Rc_N+PO (N/.09/280),LSL 為 .,USL 為 。”
“2:Col 為 Rc_V1 (N/.1/1260),LSL 為 .,USL 為 。”
“3:Col 為 Rc_V2 (N/.1/1188),LSL 為 .,USL 為 。”
“4:Col 為 Rc_V3 (N/.1/1188),LSL 為 .,USL 為 。”
“5:Col 為 Rc_V4 (N/.1/1188),LSL 為 .,USL 為 。”
... ETC
表中肯定有限制數據,我已經仔細檢查過! 那麼有什麼原因可能無法正常運作嗎? 表已打開,腳本顯然可以正常獲取列名稱,我只是無法讓它達到限制。
當我單步執行腳本並到達 spec_x = cols1[jj] << Get Property( "Spec Limits" ); 時日誌顯示:
規格限值( LSL( 10 )、USL( 50 )、目標( 30 ) )
但當我執行 print 語句時,它只是說:
“1:Col 為 Rc_N+PO (N/.09/280),LSL 為 .,USL 為 。”
任何幫助表示讚賞!
謝謝,
馬修。
回覆:嘗試從列中提取規格限制現在可以了,謝謝你的幫忙:)
回覆:嘗試從列中提取規格限制好的,看起來,根據建立規範限制的方式,<
dt =新表( “例子” ) ;
dt <<新專欄( “無規格限制” ,數位,連續的) ;
dt <<新專欄( “Rc_N+PO (N/.09/280)” ,
數位,
連續的,
設定屬性( “規格限制” ,規格限制( LSL ( 10 ) ,超雷射實驗室( 50 ) ,目標( 30 ) ) ) ,
設定值( [ 18.306 , 18.937 , 17.979 ] )
) ;
dt <<新專欄( “測試” ,
數位,
連續的,
設定屬性( “規格限制” , { LSL ( 1 ) ,超雷射實驗室( 5 ) ,目標( 3 ) ,顯示限制( 0 )} ) ,
設定值( [ 2 , 3 , 4 ] )
) ;
第 1 列= dt <<取得列名稱(數位,連續的) ;
為了(傑傑= 1 ,傑傑<= N 項(第 1 列) ,傑傑++,
問=第 1 列[傑傑] <<獲取財產( “規格限制” ) ;
規格_x =評估清單( {精胺酸(問, 1 ) ,精胺酸(問, 2 ) ,精胺酸(問, 3 )} ) ;
如果( N 行(洛克(規格_x ,空的() ) ) ,
列印(
查爾(傑傑) || “:上校” ||查爾(第 1 列[傑傑] <<得到名字) ||
“,沒有規格限制”
) ,
列印(
查爾(傑傑) || “:科爾是” ||查爾(第 1 列[傑傑] <<得到名字) || ”,LSL 是“
||查爾(規格_x [ “LSL” ] ) || “,USL 是” ||查爾(規格_x [ “USL” ] )
)
) ;
) ;
回覆:嘗試從列中提取規格限制謝謝兩位的回复,但還沒運氣。 順便說一句,我在 Win7 上使用 JMP 11.2 64 位元。
MS:在建立新的測試表時,您的程式碼對我來說運作得很好,但在使用我的表時卻沒有。
dkeshock:您的編輯沒有幫助,但確實給了我一個有用的指標可以輕鬆提取列名稱,謝謝:)
我想我現在可能找到了根本原因,但仍然不確定如何解決。 我將其中一列複製到新表中,然後使用手動輸入的限制來建立新的測試列。 該腳本適用於新的測試列:
“1:Col 為 Rc_N+PO (N/.09/280),LSL 為 .,USL 為 。”
“2:Col 為 Test,LSL 為 1,USL 為 5”
所以我查看了兩列的腳本(故意限制為幾行):
新列(“Rc_N+PO (N/.09/280)”,
數字,連續,格式(“最佳”,10),
設定屬性( "規格限值", 規格限值( LSL( 10 ), USL( 50 ), Target( 30 ) ) ),
設定值( [18.306, 18.937, 17.979] )
)
新列(“測試”,
數字,連續,格式(“最佳”,12),
設定屬性( "規格限制", {LSL( 1 ), USL( 5 ), Target( 3 ), 顯示限制( 0 )} ),
設定值( [2, 3, 4] )
)
看起來規格限制屬性的程式碼是不同的。 我能想到的唯一原因是,對於我的真實數據,我使用功能平台從數據表中導入了規格限制,而對於測試列,我手動輸入了它。
這可能是我的問題的根源嗎? 有沒有辦法解決這個問題,或者我是否需要手動輸入規格限制(或使用類似 MS 的腳本)?
謝謝你,
馬修。
回覆:嘗試從列中提取規格限制當我第一次測試他的時候,它在我現有表中的 81 列中工作了第 58 列。我發現列名稱在同一點上切換了 Cols1 變數中的約定(前 58 個是“:ColumnName”,其餘的沒有“:”),所以我改用字串名稱,它對我來說效果很好。
在上面的範例中,直到我將兩個“Cols1[jj]”更改為“Column(cols1[jj])”之前,它不會在我這邊運行。這是有原因的嗎?
回覆:嘗試從列中提取規格限制它應該可以工作,並且在下面的範例中確實如此(JMP 11),該範例基於您的程式碼。 嘗試插入Wait(0)指令來測試是否為效能問題。
//製作範例表
dt =新表( “例子” ) ;
為了(我= 1 ,我<= 100 ,我++,
坳= dt <<新專欄( “測試” ,數位,連續的) ;
評估(評估表達式(坳<<設定屬性( “規格限制” , { LSL (表達式(我) ) ,超雷射實驗室(表達式(我+ 2 ) ) ,目標(表達式(我+ 1 ) ) ,顯示限制( 0 )})))
) ;
//列印規格限制
第 1 列= dt <<取得列名稱(數位,連續的) ;
為了(傑傑= 1 ,傑傑<= N 項(第 1 列) ,傑傑++,
規格_x =第 1 列[傑傑] <<獲取財產( “規格限制” ) ;
列印(
查爾(傑傑) || “:科爾是” ||查爾(第 1 列[傑傑] <<得到名字) || ”,LSL 是“ ||查爾(規格_x [ “LSL” ] ) || “,USL 是”
||查爾(規格_x [ “我們” ] )
) ;
) ;
回覆:嘗試從列中提取規格限制這個有用嗎?
清除全域變數() ;
dt =數據表(“廢話”) ;
第 1 列= dt <<取得列名稱(數位,連續的, “細繩” ) ;
專案= N 項(第 1 列) ;
為了(傑傑= 1 ,傑傑<=專案,傑傑++,
規格_x =柱子(第 1 列[傑傑]) <<獲取財產( “規格限制” ) ;
列印(
查爾(傑傑) || “:科爾是” ||查爾(第 1 列[傑傑] ) ||
”,LSL 是“ ||查爾(規格_x [ “LSL” ] ) ||
“,USL 是” ||查爾(規格_x [ “我們” ] )
) ;
) ;
回覆:嘗試從列中提取規格限制與此討論相關 - 這是我編寫的一個簡潔的小函數,用於處理拉動規格。 它使用表達式處理和關聯數組來製作一個不錯的小字典,以供以後使用:
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
使用看起來像這樣:
Names Default To Here( 1 );
Clear Log();
getSpecs = Function( {colref},
{default local},
// get the spec limits column property
plist = colref << Get Property("Spec Limits");
// some blank lists to hold the values
keys = {};
values = {};
// loop through the property and get the sub-property name and value
// put those into the correct lists
For Each( {value, index}, plist,
Insert Into( keys, Head Name( value ) );
Insert Into( values, Arg( value, 1) );
);
// build an AA and return as the result of the function
parameters = Associative Array( keys, values );
);
// open a data table with specs
dt = Open("$Sample_Data/Quality Control/Vial Fill Weights.jmp");
// get the specs from the column
specs = getSpecs(Column("Fill Weight"));
// do something with the values
lsl = specs["LSL"];
tgt = specs["Target"];
usl = specs["USL"];
show(lsl, tgt, usl);