我有一个来自长时间会话的大型数据集,其中为每个受试者执行了许多任务。许多任务涉及相同的 4-5 种类型以及来自这些类型的多个评级和行为结果。但是,每个结果变量的命名在“类型”如何反映在名称中方面略有不同。我试图将每个结果的“类型”堆叠在一起,并合并到一个电子表格中。到目前为止,我已经能够堆叠单个变量,然后我能够通过合并和匹配受试者 ID 和重新编码的“类型”列来连接两个已堆叠不同变量的工作表。这是正确的顺序吗?堆叠变量,保存结果表,堆叠另一个电子表格中的另一个,保存结果表,连接/合并表,然后堆叠和合并更多?可以同时合并/匹配 5 个表吗?我尝试将一个新的堆叠变量添加到两个合并表的结果中,但结果似乎不正确。谢谢!
我不清楚该功能是否有效。目前我的数据类似于:
任务 1 手臂;任务 1 腿;任务 2 手臂;任务 2 腿;任务 3 手臂;任务 3 腿;任务 3 脸
除了变量名称与上面的格式不同且不一致之外。我想堆叠任务 1 的值,也分别堆叠任务 2 的值,也分别堆叠任务 3 的值,但全部由 Body Site 变量连接:
武装任务 1 值任务 2 值。(无数据)
腿部任务 1 值任务 2 值。(无数据)
面 任务 1 值 任务 2 值 任务 3 值
可以编写一个脚本来测试列名的不同变化,然后将名称更改为标准形式。
一旦采用标准格式,正如您描述名称一样,以下脚本将采用标准格式

并将其转换为表格的新形式

names default to here(1);
dt = new table("Example",
add rows(20),
New column("Task 1 arm", set each value(random integer(1,100))),
New column("Task 1 leg", set each value(random integer(1,100))),
New column("Task 2 arm", set each value(random integer(1,100))),
New column("Task 2 leg", set each value(random integer(1,100))),
New column("Task 3 arm", set each value(random integer(1,100))),
New column("Task 3 leg", set each value(random integer(1,100))),
New column("Task 3 face", set each value(random integer(1,100)))
);
dt << new column("Row", set each value(Row()));
dtStack = dt << Stack(
columns(
:Task 1 arm, :Task 1 leg, :Task 2 arm, :Task 2 leg, :Task 3 arm, :Task 3 leg,
:Task 3 face
),
Output Table( "Stack" )
);
dtStack << new column("Body Part", character, formula( word(-1, :label, " ")));
dtStack << new column( "Task", character, formula( substr(:Label, 1 ,length(:label)-length(:body part)-1)));
dtFinal = dtStack << Split(
Split By( :Task ),
Split( :Data ),
Group( :Body Part, :row ),
Output Table( "Final" ),
Remaining Columns( Drop All ),
Sort by Column Property
);
dtFinal << Sort( By(:row, :Body Part), Replace Table(1));
dtFinal << delete columns(:row);
dt << delete columns(:row);
close( dtStack, nosave );