您好,JMP 社區,我正在尋找一種解決方案,以方便一次性複製一列多次(在下面的示例中,我選擇了6 次),但所有數據都應在每個新複製的列中向下移動一行創建? 感謝您的幫忙!

您已經有了兩個好的解決方案(其中一個被標記為解決方案),但是還有另一種快速互動的方法可以做到這一點,人們有時會忘記。 選擇原始列,然後右鍵單擊列標題,選擇“新列公式”>“行”>“滯後倍數”。 在對話方塊中將“First Lag”輸入為 1,將“Last Lag”輸入為 6。
我同意@朱利安我不明白為什麼您有這樣的需求,但以下是允許您以互動方式執行此操作的步驟。
- 將第 1 列中的所有值複製到貼上緩衝區。
- 右鍵單擊行狀態列中的某一行(具有行號的列)並選擇“新增行”
- 在「新增行」對話方塊中,選擇最後要新增的 6 行。
- 轉到第一列標題旁邊的空列標題,然後右鍵單擊並選擇“新列”
- 在「新列」對話方塊中,指定要新增 6 列
- 建立列後,轉到第一個新列中的第二個儲存格,並將貼上緩衝區中的值貼到該儲存格中。它將複製從單元格(行)2 開始的所有資料。
- 對每個新列重複此操作,為每個新列向下移動一行。
你好@沃納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:對列公式版本進行了更正,以正確地將腳本開頭定義的列替換為列公式