SelectWhere:需要从JSL中的当前选择中选择<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我想从具有多个条件的数据集中选择行,但我不想使用带有“and”的单个 select where 语句,而是希望一次循环一个条件,从当前选择中进行选择。 这在选择位置窗口中非常简单(使用“从当前选择中选择”)。 我怎样才能在 JSL 中做到这一点?
例如,我有一个列名列表 cnames = {"Col1", "Col2", "Col3"} 和一个值列表 cspecs = {"a", "b","c} 我想选择我的数据表中的行,其中 Col1 = a、Col2 = b 和 Col3 = c。 我将循环访问 cnames 中的项目,并告诉它每次都从当前选择中进行选择。 谢谢!
dt<<
选择其中(作为列(cnames )==c规格)
回复:选择位置:需要从 JSL 中的当前选择中进行选择我正在尝试使用我根据此处的脚本编写的代码。 诊断列是字符列,此代码不起作用。 该表基本上分为三列,每一列都有 ICD 代码。 我想选择与 ICD 代码匹配的情况。 它应该是与任何 ICD 代码匹配的任何列,因此是嵌套的 for 循环。 未注释的代码有效,但选择字符串没有引号,可能这就是它不起作用的原因。 我怎样才能解决这个问题?
dt = Open( "\Main.jmp" );
colnames = {"Diagnosis 1", "Diagnosis 2", "Diagnosis 3"};
ICDcodes = { "7731", "7626", "V3001", "V3000"};
tblname = "Subset.jmp";
/*
dt << Select Where(
:Diagnosis 1 == "V3001",
Current Selection( "extend" )
);*/
select_string = "";
For (i = 1, i <= N Items(colnames), i++,
For (j = 1, j <= N Items(ICDcodes), j++,
if (select_string == "",
// then
// select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]);
select_string = ":" || colnames[i] || " == " || char(ICDcodes[j]) ;
// else
,
select_string = select_string || " | " ||
":" || colnames[i] || " == " || char(ICDcodes[j]);
);
);
);
select_string = "dt << select where(" || select_string || ")";
eval(parse(select_string));
print(select_string);
// Create a subset table with GA <32 weeks.
dt << Subset( Output Table( tblname ), Selected Rows( 1 ), selected columns( 0 ) );
dt2 = data table(tblname);
dt2 << save();
//dt << clear select;回复:选择位置:需要从 JSL 中的当前选择中进行选择
To select a row without deselecting a previously selected row, combine << Select Where with
<< Select Where and the current selection("extend") argument. This is an alternative to
using an OR statement.
dt << Select Where( age == 14 );
dt << Select Where( sex == "F", current selection("extend"));
姆夏普,
我不确定你显示的语法来自哪里。JMP 12.1 脚本编写指南和当前在线文档确实具有正确的文本,如上所示。
谢谢。
温迪
回复:选择位置:需要从 JSL 中的当前选择中进行选择我们可以在脚本指南中对此进行更新吗?
//脚本指南第336页
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << 选择其中( 年龄 < 15 & 性别 == "F" );
//或者
dt << 选择其中( 年龄 == 14 );
dt << 扩展选择其中( 性别 == "F" ); //什么也没做
等待(10);
dt << Select Where( sex == "F", Current Selection ("extend")); //扩展选择
回复:选择位置:需要从 JSL 中的当前选择中进行选择JMP 12 为 SelectWhere() 提供了一个新选项,允许您指定是否扩展、限制或清除当前选择。 语法如下:
dt << Select Where( condition, );
以下示例演示了扩展当前选择。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Select Where( :Age == 14 );
Wait( 1 ); //For demonstration purposes
dt << Select Where(
:sex == "M",
Current Selection( "extend" )
);
希望有帮助!
温迪
回复:选择位置:需要从 JSL 中的当前选择中进行选择For 循环应该与 where 子句一样快(如果不是更快的话) - 但“For Each Row”非常慢 - 使用 For (i=1,i<=NRows(dt),,i++ 代替
回复:选择位置:需要从 JSL 中的当前选择中进行选择一直在寻找几乎完全相同的问题的解决方案,这确实非常巧妙。不知道为什么我之前没有想到创建一个文本字符串来评估它......
SelectWhere:需要从JSL中的当前选择中选择谢谢你!字符和数字列有点棘手,但它正在工作,而且与我之前的情况相比,速度有了很大的进步。
SelectWhere:需要从JSL中的当前选择中选择一次性执行 SELECT WHERE 可能会更有效。我一直构建动态选择语句,然后使用 eval(parse()) 来运行它们。下面是 MS 的示例,修改为一次性选择位置。
dt =打开( “$ENGLISH_SAMPLE_DATA/大类.jmp” ) ;
域名= { “年龄” , “高度” , “重量” } ;
规格= { 15 , 62 , 104 } ;
选择字符串= ”” ;
为了(我= 1 ,我<= N 项(域名) ,我++,
如果(选择字符串== ”” ,
// 然后
选择字符串= “:” ||域名[我] || “==” ||字符(规格[我]) ;
// 别的
,
选择字符串=选择字符串|| “&” ||
“:” ||域名[我] || “==” ||字符(规格[我]) ;
) ;
) ;
选择字符串= “dt << 选择其中(” ||选择字符串|| “)” ;
评估(解析(选择字符串)) ;
打印(选择字符串) ;
SelectWhere:需要从JSL中的当前选择中选择谢谢-这会有所帮助。 我做了一个“每一行”来解决这个问题,但这影响了我的表现。 你的建议会加快速度。
SelectWhere:需要从JSL中的当前选择中选择可以使用当前选定行的列表作为 SelectWhere() 的条件的一部分。 该列表可以随着每次迭代而更新,如下例所示。
dt =打开( “$ENGLISH_SAMPLE_DATA/大类.jmp” ) ;
域名= { “年龄” , “高度” , “重量” } ;
规格= { 15 , 62 , 100 } ;
dt <<选择所有行;
为了(我= 1 ,我<= N 项(域名) ,我++,
选定的行= dt <<获取选定的行;
dt <<选择地点(
和(
作为列(域名[我] )[] <规格[我] ,
包含(选定的行,排() ) > 0 )
)
) ;