進行提示時出錯<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我是 JMP 新手,我在“Jump into JMP scripting”一書中找到了有關創建提示的好示例。
儘管如此,我仍然不知道如何創建一個簡單的提示,並根據我從該提示中選擇的值創建一個腳本子集。
提示應該從字符列變量“yearm”中“收集”值,例如我想根據 [201007, 201012] 之間的年月值創建圖形生成器。
歡迎所有評論。 預先感謝您幫助我解決這個問題。
錯誤消息:在訪問或評估 'Subscript' 、quarter[select1 << get] 時,下標無效(必須是數字或數字列表){1}
這是一些代碼:
Summarize( 季度= By( Column( dt, "yearm" ) ) );
nw = 新窗口( "選擇宿舍",
hb = 面板框( "選擇年份",
select1 = 列錶框(四分之一,
dt << 選擇其中(
:yearm==quarter[select1 << get] );
selRows = dt << 獲取選定行;
)
),
按鈕框(“確定”,
nw << 關閉窗口;
dt << 選擇其中(
:yearm==quarter[select1 << get]
);
/* 選定的行被子集到新表中。 */
dt << Subset( 輸出表名稱( "選擇的宿舍" ) );
)
);
回复:提示時出錯好的,我會嘗試一下,當我的 JMP 更新到 10 時回复。 更新媒體已到達,但仍在等待。
非常感謝您,您是這方面的專業用戶。 希望我也能學到一些東西。
回复:提示時出錯哎喲! 那麼 Contains() 將慢得令人痛苦。 我建議使用內置的 Data Filter() 作為提示的一部分。 對於大表來說,速度會快得多。
在 JMP 10 中嘗試下面的示例(似乎不像在 JMP 9 中那樣工作)。 對於 100 萬行表 (MacPro 8x2.8 GHz),選擇和子集設置幾乎是瞬時的。
//示例表
dt =新表( “大的” ,
添加行( 1000000 ) ,
新專欄( “四分之一” ,名義上的,公式( 1 + 10 *圓形的(隨機制服() / 3 , 1 ) ) )
) ;
dt <<運行公式() ;
柱子( “四分之一” ) <<刪除公式;
//迅速的
df = dt <<數據過濾器(列( :四分之一) ) ;
RDF = df <<報告;
RDF [輪廓盒( 1 )] <<設置標題( “選擇一個或多個季度” ) <<附加(
按鈕盒( “製作子集” ,
dt <<子集(輸出表名稱( 《選擇的年齡》 ) ) ;
df <<關閉,西北<<關閉
)
) ;
//可選定制:rdf[listbox(4)]<回复:提示時出錯
謝謝兩位給了我很好的建議,我很感激! 代碼現在可以正常工作,但在使用 150 萬行時有點慢。
回复:提示時出錯是的,Contains() 函數在這裡更優雅。 但如果在上面的示例中僅選擇一項,則會出現錯誤。 大概是因為列表號[選擇1 <<獲取選定的索引]然後返回一個數字而不是數字列表。
這裡
dt <<選擇地點(包含(選擇1 <<被選中,字符( :年齡) ) ) ;
效果更好,並且無論 :age 是字符還是數字都應該有效。
回复:提示時出錯有一個方便的結構可以使用帶有以下內容的列表來搜索列包含功能。下面的代碼展示瞭如何使用它:
dt =打開( “$sample_data\big class.jmp” ) ;
總結(年齡列表=經過(柱子( dt , “年齡” ) ) ) ;
列表號= {} ;
為了(我= 1 ,我<=尼特姆斯(年齡列表) ,我++,
列表號[我] =編號(年齡列表[我]) ;
) ;
西北=新窗戶( 「選擇年齡」 ,
血紅蛋白=面板盒( 「選擇年齡」 ,
選擇1 =列錶框(
年齡列表,
dt <<選擇地點(包含(列表號[選擇1 <<獲取選定的索引] , :年齡) ) ;
selRows = dt <<獲取選定的行;
)
) ,
按鈕盒( “好的” ,
dt <<選擇地點(包含(列表號[選擇1 <<獲取選定的索引] , :年齡) ) ;
/* 選定的行被子集到新表中。 */
dt <<子集(輸出表名稱( 《選擇的年齡》 ) ) ;
西北<<關閉窗口;
)
) ;
回复:提示時出錯比較
:年==季度列表[選擇1 <<得到]
不適用於多個值,因為它測試單元格值和列表的相等性。 它總是返回 false (我不認為單元格可以包含列表)。
做這件事有很多種方法。 這是一個建議(對於“確定”按鈕腳本),其中行選擇基於通過循環選定項目列表獲得的行號矩陣。
按鈕盒( “好的” ,
行= [] ;
L =季度列表[選擇1 <<獲取選定的指數] ;
為了(我= 1 ,我<= N 項( L ) ,我++,
行=行|| ( dt <<獲取行,其中( :年== L [我] ))
) ;
/* 選定的行被子集到新表中。 */
dt <<子集(行(rows),輸出表名( 《選定的宿舍》 ) ) ;
西北<<關閉窗口;
)
回复:提示時出錯謝謝,現在當我只選擇變量的一個值時,它可以正常工作,當我想通過按 Shitf 將變量的三個值選擇為新數據時,我該怎麼辦?
回复:提示時出錯用作列表索引時,方括號內的內容必須是數字(或數字列表)。 嘗試一下
季度列表[選擇1 <<獲取選定的指數]
回复:提示時出錯謝謝您的提示。
它仍然抱怨那些 [select1 << get] 點。
該變量yearm是一個字符變量,即使我將yearm設置為數字變量也沒有幫助。
“在訪問或評估 'Subscript' 時,下標無效(必須是數字或數字列表){1},quarter_list[select1 << get]”
回复:提示時出錯我不會使用quarter 作為變量,因為它也是一個JMP 函數。也許是quarter_list?還可以嘗試將關閉窗口語句放在最後。未測試代碼:
總結(季度列表=經過(柱子( dt , “年” ) ) ) ;
西北=新窗戶( 「選擇宿舍」 ,
血紅蛋白=面板盒( “選擇年” ,
選擇1 =列錶框(
季度列表,
dt <<選擇地點( :年==季度列表[選擇1 <<得到] ) ;
selRows = dt <<獲取選定的行;
)
) ,
按鈕盒( “好的” ,
dt <<選擇地點( :年==季度列表[選擇1 <<得到] ) ;
/* 選定的行被子集到新表中。 */
dt <<子集(輸出表名稱( 《選定的宿舍》 ) ) ;
西北<<關閉窗口;
)
) ;