嗨-两个有点相关的问题
我已经使用SPLIT将长文件转换为宽文件,但情况有些复杂,我想将宽文件堆叠/转置为长文件。
我有一个具有唯一主题ID的数据集,然后有数百个列/变量。 变量名称完全相同,除了Year 1以'2'结尾,Year 2以'3'结尾等等。是否有一种相对简单的方法来使该文件变长,使得有一个时间变量(1, 2,3,4),并且变量名仅在其中一次,而末尾没有数字?
在这种数据集中,相关但以不同的方式处理上述问题,有一种方法可以在JMP中创建一个公式以告诉所有XXX百列,从行尾删除#(例如1、2)列/变量名称? 显然,我可以手动执行此操作,但这将永远做下去。
非常感谢!
这是一个脚本,它将生成一个包含三列的堆叠数据表

这是一个脚本,它将从数据表的列尾去除数字。请记住,重命名列时,如果最终结果是与先前列名相同的列名,则JMP将添加一个数值,以使新列名成为唯一名称。
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 2, 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;:, -_)("
)
)
)
);非常感谢您的回复。如果有记性的话,去年您还帮了我一个问题。
不幸的是,我对JMP脚本并不精明,仅需点击即可。而且即使我能弄清楚,因为我有很多变量,所以我必须为每个变量运行该代码,不是吗?