您好,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:对列公式版本进行了更正,以正确地将脚本开头定义的列替换为列公式