使用JSL查询jmp数据表你好,
我需要在 Big Class.jmp 中获取 12 岁和 13 岁的不同姓名列表
我现在的方式似乎效率很低。 (选择位置、子集...)
使用 Query(); 执行此操作的方法是什么?
谢谢。
我的脚本是:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
AgeList = {13, 15};
dt << Select where( Contains( AgeList, :Age ) > 0 );
SubsetDt = dt << Subset( Selected Rows, Columns( "name" ) );
Summarize( SubsetDt, DistinctNames = By( :(1) ) );
Close( SubsetDt, nosave );
Show( DistinctNames );Re: 使用JSL查询jmp数据表非常感谢,这正是我所需要的。
Re: 使用JSL查询jmp数据表谢谢你,吉姆, @tx尼尔森。
@汤姆_阿布拉莫夫,有多种方法可以做到这一点。 由于您使用了查询一词,我怀疑您可能有更复杂的 SQL 类型选择,因此我使用了 JMP query() 函数。下面是一个不需要 SQL 语法的简单方法。 关联数组是一个带键的列表,并且键必须是唯一的。:name[idx] 生成包含 12、13 和 15 岁儿童的所有行的列表。 关联数组仅具有关联值为 1 的唯一名称。 唯一的名称是关联数组的键。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
idx = dt << get rows where(Contains(Agelist,:age));
uniq_names = Associative Array( :name[idx] ) <<GET keys=""></GET>
Re: 使用JSL查询jmp数据表让查询创建数据表实际上并不是一个阻碍因素。下面的脚本是对上一个脚本的简单修改,添加了将“名称”列的内容从最终数据表移动到列表中,然后删除数据表。对于运行该脚本的任何人来说,都不会显示任何数据表。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
_xx = Words( Char( AgeList ), "{}" )[1]; //convert to a comma delimited text and remove braces {}
ndtQ = Query( Table( dt, "t1" ),invisible, Eval Insert( "SELECT DISTINCT name From t1 WHERE age IN (^_xx^)" ) );
namesList = ndtQ:Name << get values;
Close( dt, NoSave );
close(ndtQ, nosave);Re: 使用JSL查询jmp数据表这非常有帮助,谢谢。
我正在使用 JMP 15。
还有一个问题——我可以将查询结果直接保存到列表中而不是创建数据表吗?
那是因为我不需要表格,我需要一个不同名称的列表。
如果没有,它仍然比 SelectWhere --> Subset 好得多。
谢谢。
Re: 使用JSL查询jmp数据表@汤姆_阿布拉莫夫,
您没有提及您正在使用哪个版本的 JMP。我不记得 JMP query() 函数首先在 JMP 12 或 13 中是否可用。 您可以在 JMP 表上使用标准 SQL 语句。由于 Big Class 对于 12 岁和 15 岁的孩子只有一个非唯一的名字 Robert,因此我修改了您针对 12、13 和 15 岁孩子的请求。
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
_xx = Words( Char( AgeList ), "{}" )[1]; //convert to a comma delimited text and remove braces {}
ndtQ = Query( Table( dt, "t1" ), Eval Insert( "SELECT DISTINCT name From t1 WHERE age IN (^_xx^)" ) );
ndtQ << set name( "Unique BC Names" );
Wait( 3 );
Close( dt, NoSave );
结果如下:
