基于可能包含不存在列的列表创建列子集用户您好,
我阅读了之前与该主题相关的讨论,但没有找到所有答案。
我想知道如何根据给定的列列表创建列子集。 我知道当给定列表中的列存在于您想要子集的数据表中时,您可以轻松地执行此操作。
我想知道的是如何使脚本变得健壮,以便在列表中给定列不存在的情况下,不会给出“在‘错误参数’的访问或评估中找不到列”的错误。
例如,在下面的脚本中,我仍然希望能够使用列、名称、年龄和身高创建“Big Class.jmp”的子集,因为它们存在,但我的脚本会崩溃,因为我有一个非-给定列表中存在的列称为“无”。
我尝试将 Try() 放在代码中,但没有成功。
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
big_class_cols = dt << Get Column Names();
show(big_class_cols);
subDt1 = dt << Subset(
Columns( cols_of_interest ),
Output Table Name( "Big Class 2" )
);
”
谢谢,
西蒙
数据存取数据混合和清理回复:根据可能包含不存在列的列表创建列子集非常优雅的解决方案。 效果很好。
谢谢吉姆!回复:根据可能包含不存在列的列表创建列子集这是使用 <
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols_of_interest = {name, age, height, none}; //names without scoping colon
AA1 = Associative Array( dt << Get Column Names() );
AA2 = Associative Array( cols_of_interest );
cols = AA2 << intersect( AA1 ) << get keys;
subDt1 = dt << Subset( Columns( cols ), Output Table Name( "Big Class 2" ) );
回复:根据可能包含不存在列的列表创建列子集这是处理这个问题的简单方法。它只是检查数据表中是否存在 cols_of_interest 列表中的每一列,如果不存在,则将其从 cols_of_interest 列表中删除。
names default to here(1);
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For(i=nitems(cols_of_interest), i>=1, i--,
if(try(column(dt,char(cols_of_interest[i]))<<GET name=""></GET>