次のエントリまで空の行を置き換える (そして続行する) 方法は?親愛なる JMP コミュニティへ
(W10、64 ビット、JMP 15.0 Pro)
Excel ファイルからインポートされた大きなデータ テーブルがあり、列の空の行に前のリストのエントリを入力する必要があります。 以下に示すように、左側の列から右側の列に移動するようにJSLを記述しようとしています。

コーディングはかなり簡単だと思いますが、私が抱えている問題は、以前の製品の最後で正しく停止し、新しい製品から始めることです。 私は正しくループしていてはいけません。
提案/ヘルプは大歓迎です。
ありがとう!、
DS
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?何人かの JMP システム エンジニアがこの問題に取り組み、これが最善の解決策でした。 @Brady Brady によるこの最終バージョンは、私たちが始めた単純な式よりも速く、より堅牢です。 私は何年もそれを使用してきましたが、多くの状況でうまく機能することがわかりました. それがうまくいったことを嬉しく思います!
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?やあ@バイロン_JMP 、
前回の投稿でのスクリプト調整コードに感謝します。 これは、列の最初のエントリが欠落しているかどうかを確認し、欠落している場合は、それを次の既存のエントリに置き換えるため、私のソリューションよりも優れています。これは、いくつかのインポートで発生することがわかりました。 vec およびマトリックス情報を使用して特定のものを検索する方法など、スクリプト ソリューションの一部については経験がありません。 とにかく、私はそれを自分の問題に適用しましたが、問題なく修正されました。
ありがとう!、
DS
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?同じ操作を実行するJSL関数またはメッセージが見つかりません。 存在しないと思います。 Main Menu() 関数がありますが、このコマンドはメインの JMP メニューではなく、選択した列に関連付けられています。
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?インタラクティブ ソリューションの背後にある JSL コードがわかりません。 そこには複数のオプションがあるので、それは問題ないはずです。
一部のスクリプトと同様に、インタラクティブなソリューションが複数の列に同時に適用できることは知っています。 すべての列を選択して右クリックし、[塗りつぶし] オプションを選択します。
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?これらは、ソリューションのスクリプトを作成する場合に役立ついくつかの JSL ノートです。
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?本当に素晴らしいアドインがありますデータ テーブル ツール
これを行う補間ツールがあります。 さらに、大きなテーブルの数式よりもはるかに高速です。

Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?やあ@ダン_オーバーミラー、
それについて頭を上げてくれてありがとう。 Fill to End、to row、または fill パターンを見たことがありますが、それは以前に見たことがありません。
それを行うJSLコードを知っていますか? 私が尋ねる理由は、私はこれをすべてJSLコードにしたいということです。なぜなら、私はいくつかのファイルを読み込んで大きなデータテーブルを構築し、プロセスを自動化する必要があるため、エンドユーザーはスクリプトを実行するだけで、欠損値のないテーブルが得られるからです。製品。 それが私のソリューションよりも速くて洗練されている場合は、コードを変更してスクリプトに挿入したいと思います。
ありがとう!、
DS
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?ジョブを実行するスクリプトがありますが、インタラクティブなソリューションもあります。 すべての行が選択されるように、置換が必要な列を選択します。 その列のデータ グリッドを右クリックし、[塗りつぶし] > [欠損値を前の値で置換] を選択します。

Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?やあ@ティエリー_S 、
あなたの数式はおそらくうまくいくでしょうが、私が持っている特定のテーブルでは理想的に機能させることができませんでした. 私が見つけた問題の 1 つは、Product が変更された場所で複数の行が次々に発生し、ラグが機能しないことがあるということです。
私は完全に機能するこのコードを思いつきました。 あまりエレガントではありませんが、機能します。
ご協力いただきありがとうございます!、
DS
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
Re: 次のエントリまで空の行を置き換える (そして続行する) 方法は?こんにちは、これはトリックに必要な簡単な式です
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
一番、
TS