こんにちは、JMP コミュニティです。列を一度に何度もコピーしやすくするための解決策を探しています (下の例では 6 回選択しています)。作成した? ご協力ありがとうございました!

すでに 2 つの優れた解決策 (および 1 つが解決策としてマークされている) がありますが、これを実行する別の簡単なインタラクティブな方法もありますが、それは人々が時々忘れてしまうことがあります。 元の列を選択し、列ヘッダーを右クリックして、[新しい列の数式] > [行] > [ラグ倍数] を選択します。 ダイアログで、First Lag を 1、Last Lag を 6 に設定します。
私は同意します@ジュリアンなぜそのような必要があるのか わかりませんが、これをインタラクティブに行うための手順を以下に示します.
- 列 1 のすべての値を貼り付けバッファーにコピーします。
- 行状態列 (行番号のある列) の行の 1 つを右クリックし、[行の追加] を選択します。
- [行の追加] ダイアログ ボックスで、最後に追加する 6 行を選択します。
- 最初の列のヘッダーの横にある空の列ヘッダーに移動し、右クリックして [新しい列] を選択します。
- [新しい列] ダイアログ ボックスで、6 つの列を追加することを指定します。
- 列が作成されたら、最初の新しい列の 2 番目のセルに移動し、値を貼り付けバッファーからセルに貼り付けます。セル (行) 2 から始まるすべてのデータをコピーします。
- 新しい列ごとにこれを繰り返し、新しい列ごとに 1 行下に移動します。
やあ@ヴェルナーL 、
以下はそれを行うためのコードです (値または列式のいずれかを記述します)。しかし、なぜこのようなテーブルを作成する必要があるのでしょうか? 前の列の前の行の値を使用して行単位でいくつかの操作を実行する必要がある場合は、それらのラグ列を明示的に作成するよりも効率的な方法があります。
このフォームは値を書き込みます:
dt = Open("$SAMPLE_DATA\Big Class.jmp");
baseCol = Column("height");
nCopies = 6;
For( i = 1, i <= nCopies, i++,
spacerMat = J( i, 1, . );
valuesMat = spacerMat |/ Eval( baseCol << Get Values );
New Column( "Copy " || char(i), Numeric, "Continuous", Set Values( valuesMat ) );
);
このフォームは列式を書き込みます:
dt = Open("$SAMPLE_DATA\Big Class.jmp");
baseCol = Column("height");
nCopies = 6;
For( i = 1, i <= nCopies, i++,
Eval(Substitute( Expr( New Column( "Copy " || Char( i ), Numeric, "Continuous", Formula( Lag( Subscript(xxCol,row()), i ) ) ) ), Expr( i ), i, expr(xxCol), baseCol ))
);
これがあなたが始めるのに役立つことを願っています!
@ジュリアン
//編集 11/24/19: スクリプトの開始時に定義された列を列式に正しく置き換えるために、列式バージョンに修正を加えました