嗨——两个有些相关的问题
我已经使用 SPLIT 将长文件转换为宽文件,但我有一个稍微复杂的情况,我想将宽文件堆栈/转置为长文件。
我有一个具有唯一主题 ID 的数据集,然后有数百列/变量。 变量名称完全相同,但第 1 年以“2”结尾,第 2 年以“3”结尾,等等。是否有一种相对简单的方法可以使该文件变长,例如有一个时间变量(1, 2,3,4) 并且变量名只出现一次,末尾没有数字?
相关但以不同的方式处理上述内容,在这样的数据集中,有没有一种方法可以在 JMP 中创建一个公式来告诉它所有 XXX 百列,从末尾删除 #(例如,1, 2)列/变量名称? 显然我可以手动完成此操作,但这需要很长时间。
非常感谢!
我将指导您使用下面的数据表生成堆叠数据表

去
表=>堆栈
通过将要堆叠的所有列放入“堆叠列”选择框中来填写对话框窗口。

它将创建一个如下所示的表

在数据表中创建一个名为“列名称”的新列

右键单击“列名称”列的列标题,然后选择“公式”

需要指定一个公式,该公式获取“标签”列中值末尾的数字之前的所有内容,并将其保留为“列名称”值。因此,这可以通过多种方式完成,具体取决于实际数据。在我们的示例中,公式将找到出现任何数字之前的所有内容,并将其作为“列名称”值。
该公式查找 :Label 列中的第一个单词,只要找到任何数值“0123456789”就停止

结果是

现在创建另一个新列并将其命名为“Year”。在本例中,我们希望将列中的最后一个字符作为年份公式的值:

这给了你最终的数据表

关于列的重命名,我不知道以交互方式进行此操作的交互方式。所以我认为你必须运行我之前提供的脚本
我真的很感谢你的回复。如果没记错的话,去年你也帮我解答了一个问题。
不幸的是,我不熟悉 JMP 脚本,只能点击。即使我能弄清楚,因为我有很多变量,我也必须为每个变量运行该代码,不是吗?
这是一个脚本,它将生成一个包含 3 列的堆叠数据表

这是一个脚本,它将从数据表中的列末尾去除数字。请记住,重命名列时,如果最终结果的列名与前一列的名称相同,JMP 将添加一个数值以使新列名成为唯一的名称
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, i <= N Cols( dt ), i++,
if(
is missing(
Num(
word(
-1,
Lowercase( Column( dt, i ) << get name )
,
"abcdefghijklmnopqrstuvwxyz;:, -_)(")
)
) == 0,
Column( dt, i ) <<
set name(
substr(
Column(dt,i)<<GET name=""></GET>
Names Default To Here( 1 );
dt = new table( "Example",
add rows( 10 ),
New Column( "Year2", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year3", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year4", formula( Random Integer( 1, 100 ) ) )
);
dtStack = Data Table( "Example" ) << Stack(
columns( :Year2, :Year3, :Year4 ),
Source Label Column( Column ),
Stacked Data Column( "Data" )
);
dtStack << New Column( "Year",
formula(
Num(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);
dtStack:Year << delete formula;
for each row(
:Column = substr(
:Column,
1,
Length( :Column ) - Length(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);