关联数组重命名数据表列嗨,JMP社区,
我有一个包含许多列的数据表(dt1),想重命名它们。 它们用奇怪的名字编码。 但是,我还有另一个只有两列:Name和:Code的数据表(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命令获得更好的结果,这就是为什么我要遍历关联数组的原因。 如果不可能的话,我将以暴力方式进行。
感谢您对此的任何想法和反馈!,
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>回复:关联数组重命名数据表列你好@戴维·伯纳姆,
感谢您的反馈意见。 我显然需要对关联数组进行更多阅读。 我不太在意For Loops,但希望以更优雅的方式编写重命名代码。 到另一个线程的链接是一个非常优雅的解决方案,可以根据另一列的数字条目对列值进行重新排序。 关联数组在该脚本中的工作方式是我认为它适用于表列的方式,但显然没有。 过去,我使用列表{...}使用For Loops对列进行了重命名,但希望尝试一种不带循环的不同方法。 但是,我确实喜欢您介绍的关联数组方法,并且会以这种方式而不是构建列表来进行操作。
我想我在想,有了第一个数据表中的列名列表和第二个数据表中的关联数组,就可以很容易地由于关联数组而重新分配名称,几乎就像该列的“ recode”函数一样名称。
无论如何,我感谢您对使用关联数组重命名列的问题所给予的答复和解决方案。 是时候回到数据了!
谢谢!,
DS
回复:关联数组重命名数据表列为了清楚起见,我对数组内容进行了硬编码,以便有一个有效的示例-从单独的表填充键和值仍然有意义。还请注意,不需要任何评估,Expr等。祝您好运。
回复:关联数组重命名数据表列你好@戴维·伯纳姆,
是的,我遵循您的示例并理解了硬编码。 使用“名称”和“代码”列的另一个表时,创建关联数组很容易(注意:必须以正确的顺序),以便在设置列名时将正确的值应用于匹配键。 我运行它,它运行良好。 再一次感谢你的帮助!
DS