关联数组重命名数据表列您好 JMP 社区,
我有一个包含许多列的数据表 (dt1),并且想重命名它们。 他们用奇怪的名字编码。 但是,我有另一个数据表(dt2),只有两列:名称和:代码。 dt2 中的每一行都有与代码关联的有意义的名称。
我知道如何使用 for 循环来做到这一点,但我正在尝试学习一些新的东西,并希望通过关联数组来做到这一点。 类似于此线程中的内容这里. 我以为我可以做这样的事情:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
但是,不幸的是,这不起作用。 它的行为不像我想法关联数组的行为。
再次,我想尝试学习一些新的东西,并通过新的 JSL 命令变得更好,这就是我想通过关联数组工作的原因。 如果不可能,我会用蛮力的 For-Loop 方式来做。
感谢您对此的任何想法和反馈!
DS
数据表脚本回复:关联数组重命名数据表列你好@大卫伯纳姆,
是的,我按照你的例子理解了硬编码。 当使用另一个名称和代码列的表时,很容易创建关联数组(注意:必须按正确的顺序),以便在设置列名时,它将正确的值应用于匹配的键。 我运行了它,它运行良好。 再一次感谢你的帮助!
DS
回复:关联数组重命名数据表列为了清楚起见,我对数组内容进行了硬编码,以便我有一个工作示例 - 从单独的表中填充键和值仍然有意义。另请注意,不需要任何 Eval、Expr 等。祝你好运。
回复:关联数组重命名数据表列你好@大卫伯纳姆,
感谢您的反馈意见。 我显然需要对关联数组进行更多阅读。 我不太介意 For Loops,但希望以更优雅的方式对重命名进行编码。 到另一个线程的链接是一个非常优雅的解决方案,可以根据另一列的数字条目对列值重新排序。 关联数组在该脚本中的工作方式是我认为它适用于表格列的方式,但显然不是。 过去,我使用列表 {...} 使用 For 循环对列进行了重命名,但我希望尝试一种不使用循环的不同方式。 但是,我确实喜欢您提供的关联数组方法,并且会这样做而不是构建列表。
我想我在想,使用第一个数据表中的列名列表和第二个数据表中的关联数组,由于关联数组,人们可以轻松地重新分配名称,几乎就像列的“重新编码”函数名字。
无论如何,感谢您对我使用关联数组重命名列的问题的回复和解决方案。 是时候回到数据了!
谢谢!,
DS
回复:关联数组重命名数据表列使用关联数组和 for 循环并不相互排斥。我知道很多人喜欢避免使用 for 循环,但最终你想迭代表的列,而 for 循环旨在进行迭代。
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>