プロンプト作成時のエラー<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私は JMP を初めて使用しますが、書籍「Jump into JMP scripting」で、優れたプロンプトの作成に関する優れた例を見つけました。
それでも、単純なプロンプトを作成し、そのプロンプトから選択した値に基づいてスクリプトを使用してサブセットを作成する方法がわかりません。
プロンプトは文字列変数「yearm」から値を「収集」する必要があります。たとえば、[201007, 201012] の間の yearmonth 値に基づいてグラフ ビルダーを作成したいと考えています。
すべてのコメントを歓迎します。 この問題を解決していただきありがとうございます。
エラー メッセージ: 'Subscript' のアクセスまたは評価における無効な添字 (数字または数字のリストである必要があります){1}、quarter[select1 << get]
以下にコードを示します。
Summarize( 四半期= By( Column( dt, "yearm" ) ) );
nw = 新しいウィンドウ( "四半期を選択",
hb = パネル ボックス( "年を選択してください",
select1 = リスト ボックス (四半期、
dt << 場所を選択(
:yearm== 四半期[select1 << get] );
selRows = dt << 選択された行を取得します。
)
)、
ボタンボックス(「OK」、
nw << ウィンドウを閉じる;
dt << 場所を選択(
:yearm== 四半期[select1 << get]
);
/* 選択した行が新しいテーブルにサブセット化されます。 */
dt << Subset( 出力テーブル名( "選択された四半期" ) );
)
);
Re: プロンプト作成時のエラーわかりました。試して、JMP が 10 に更新されたら返信します。 更新メディアが到着しましたが、まだ待機中です。
ありがとうございます、あなたはこれのプロユーザーです。 私も何かを学んでいることを願っています。
Re: プロンプト作成時のエラーああ! そうなると、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 )] <<タイトルを設定する( 「1 つ以上の四半期を選択してください」 ) <<追加する(
ボタンボックス( 「サブセットの作成」 、
dt <<サブセット(出力テーブル名( 「選ばれた時代」 ) ) ;
DF <<近い、新しい<<近い
)
) ;
//オプションのカスタマイズ: rdf[listbox(4)]<Re: プロンプト作成時のエラー
お二人とも本当に良いアドバイスをいただき、感謝しています! コードは正常に動作するようになりましたが、150 万行を使用すると少し遅くなります。
Re: プロンプト作成時のエラーはい、ここでは Contains() 関数の方が洗練されています。 ただし、上記の例で項目を 1 つだけ選択すると、エラーが発生します。 おそらく理由はalist_num [選択1 <<選択したインデックスを取得する】次に、数値のリストの代わりに数値を返します。
ここ
dt <<場所を選択してください(含まれています(選択1 <<選ばれる、 char( :年) ) ) ;
のほうがうまく動作し、:age が文字か数値かに関係なく動作するはずです。
Re: プロンプト作成時のエラーリストを使用して列を検索するための便利な構造があります。含まれています関数。以下のコードはその使用方法を示しています。
dt =開ける( "$sample_data\big class.jmp" ) ;
要約する(年齢リスト=に(桁( dt 、 "年" ) ) ) ;
alist_num = {} ;
ために(私= 1 、私<=ナイアイテム(年齢リスト) 、私++、
alist_num [私】 =番号(年齢リスト[私]) ;
) ;
新しい=新しい窓( 「年齢を選んでください」 、
HB =パネルボックス( 「年齢を選んでください」 、
選択1 =リストボックス(
年齢リスト、
dt <<場所を選択してください(含まれています( alist_num [選択1 <<選択したインデックスを取得する】 、 :年) ) ;
selRows = dt <<選択した行を取得する;
)
) 、
ボタンボックス( "OK" 、
dt <<場所を選択してください(含まれています( alist_num [選択1 <<選択したインデックスを取得する] 、 :年) ) ;
/* 選択した行が新しいテーブルにサブセット化されます。 */
dt <<サブセット(出力テーブル名( 「選ばれた時代」 ) ) ;
新しい<<ウィンドウを閉じる;
)
) ;
Re: プロンプト作成時のエラー比較
:年==四半期リスト[選択1 <<得る】
は、セル値とリストが等しいかどうかをテストするため、複数の値に対しては機能しません。 常に false を返します (セルにリストを含めることはできないと思います)。
これを行うにはいくつかの方法があります。 ここでは、行の選択が、選択された項目のリストをループすることによって取得された行番号の行列に基づいて行われる 1 つの提案 (OK ボタン スクリプト用) を示します。
ボタンボックス( "OK" 、
行= [] ;
L =四半期リスト[選択1 <<選択したインデックスを取得】 ;
ために(私= 1 、私<= N 個のアイテム( L ) 、私++、
行=行|| ( dt <<行を取得します。 ( :年== L [私】 ))
) ;
/* 選択した行が新しいテーブルにサブセット化されます。 */
dt <<サブセット(行(行)、出力テーブル名( 「選ばれた地区」 ) ) ;
新しい<<ウィンドウを閉じる;
)
Re: プロンプト作成時のエラーありがとうございます。変数の値を 1 つだけ選択すると正常に動作するようになりました。たとえば、Shitf を押して新しいデータに変数の値を 3 つ選択したい場合はどうすればよいですか?
Re: プロンプト作成時のエラーリストのインデックスとして使用する場合、角括弧の内側は数値 (または数値のリスト) でなければなりません。 代わりに試してください
四半期リスト[選択1 <<選択したインデックスを取得]
Re: プロンプト作成時のエラーヒントをありがとうございます。
[select1 << get] ポイントについては依然として不満が残っています。
その変数 yearm は文字変数であり、yearm を数値変数として作成しても役に立ちませんでした。
「'Subscript' のアクセスまたは評価で無効な添字 (数字または数字のリストでなければなりません){1}、quarter_list[select1 << get]」
Re: プロンプト作成時のエラー四半期は JMP 関数でもあるため、変数としては使用しません。たぶん四半期リストでしょうか?また、close window ステートメントを最後に置いてみてください。コードのテストを解除します:
要約する(四半期リスト=に(桁( dt 、 「年」 ) ) ) ;
新しい=新しい窓( 「四半期を選択してください」 、
HB =パネルボックス( 「年を選択してください」 、
選択1 =リストボックス(
四半期リスト、
dt <<場所を選択してください( :年==四半期リスト[選択1 <<得る】 ) ;
selRows = dt <<選択した行を取得する;
)
) 、
ボタンボックス( "OK" 、
dt <<場所を選択してください( :年==四半期リスト[選択1 <<得る] ) ;
/* 選択した行が新しいテーブルにサブセット化されます。 */
dt <<サブセット(出力テーブル名( 「選ばれた地区」 ) ) ;
新しい<<ウィンドウを閉じる;
)
) ;