你好,
我已经尝试了很多方法来尝试在我的预过滤表中选择具有 PM#=2 和 Logistic#=1 的特定行,但我要么收到“发送期望可编写脚本的对象”消息,要么收到“可编写脚本的[]”消息,然后脚本终止,或无限循环。有人可以帮助解决我无法对行选择进行编程的语法不合适的地方吗?谢谢!
lamstationfile=Pick File("choose file","$Documents" );
dt=Open(lamstationfile,
Import Settings(End Of Field( Tab ),Scan Whole File( 1 ), Column Names Start(7 ),Data Starts( 8),));
dt = Current Data Table();
//find data rows
w=NRow(dt);
dt<<SELECT where="">(d-1));
dt2=dt<<SUBSET>(d-1))<<DELETE rows=""></DELETE></SUBSET></SELECT>
我以为@uday_guntupalli代码应该可以工作,但是在 13.2.1 中它不会(奇怪)。但是,使用 As Column() 而不是 Column() 允许您的特定代码工作
Names Default To Here( 1 );
dt3 = Open( "$SAMPLE_DATA/Big Class.jmp" );
logis = "55";
clos = "Height";
dt3 << Select Where( As Column( dt3, clos ) == Num( logis ) );
dt3 <Re: Scriptable[] or 'send expects scriptable object'对不起,我应该更清楚。我遇到的问题是在我创建了第三个数据表 dt3 之后我的代码结束了。最后一行代码之前的所有内容都工作正常[在第一个数据表 dt 中获取行和列,设置输入 PM#=2 和 Logistic#=1 都很好]。我只是无法在 Logistic# =1 的 dt3 中选择几行。
我已经尝试了下面代码摘录中提到的几种不同方法,但我的代码要么以“Scriptable[]”注释终止,要么出现“Send expects scriptable object”错误。我不确定下面的代码在哪里阻止它正常运行。
<SPAN class="token comment">//dt3<<GET rows="" where="">
dt3<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN>Selet Where<SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN><SPAN class="token function">Column</SPAN><SPAN class="token punctuation">(</SPAN> dt3<SPAN class="token punctuation">,</SPAN> clos <SPAN class="token punctuation">)</SPAN> <SPAN class="token operator">==</SPAN> <SPAN class="token function">Num</SPAN><SPAN class="token punctuation">(</SPAN> logis <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//Method#2</SPAN>
<SPAN class="token comment">//For(i=1, i=NRows(dt3), i++, //Method#3</SPAN>
<SPAN class="token comment">//If( Column( dt3, clos )[i] == Num( logis ),</SPAN>
<SPAN class="token comment">// Column( dt3, clos )[i] << Set Selected( 1 )); );</SPAN>
<SPAN class="token comment">//For Each Row(If( :Column( dt3, clos ) == Num( logis ), :Column( dt3, clos ) << Set //Selected(1)); //Method#4</SPAN></GET></SPAN>
Re: Scriptable[] or 'send expects scriptable object'这是一个涵盖数据表中第一个问题的脚本,在找到“NUM_DATA_ROWS:
lamstationfile = Pick File( "choose file", "$Documents" );
dt = Open( lamstationfile, Import Settings( End Of Field( Tab ),
Scan Whole File( 1 ), Column Names Start( 7 ), Data Starts( 8 ), ) );
dt = Current Data Table();
//find data rows
w = N Row( dt );
dt << Select Where( :Time == "NUM_DATA_ROWS" ) << Label( 1 );
d = dt << Get Selected Rows;
Show( d );
// A matrix is returned from << Get Selected Rows, so you need to reference d[1]
dt << Select Where( Row() > (d[1] - 1) );
dt2 = dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
dt /*<< Select Where( Row() > (d - 1) )*/ << Delete Rows;
// Change first two columns to numeric data
Column( dt, 1 ) << Data Type( Numeric );
Column( dt, 1 ) << Modeling Type( "Continuous" );
Column( dt, 1 ) << format("hr:m:s");
Column( dt, 2 ) << Data Type( Numeric );
Column( dt, 2 ) << Modeling Type( "Continuous" );
关于您选择列然后进行子集化,我建议您使用内置的列选择工具“Columns Viewer”,而不是构建您自己的选择工具。
dt << Columns Viewer;
Re: Scriptable[] or 'send expects scriptable object'对不起。数据现在已正确附加。
Re: Scriptable[] or 'send expects scriptable object'@asdf :
附件 (.zip) 文件为空 - 因此未提供您的数据来测试您的代码并查看错误以进行故障排除。
在没有您正在使用的实际数据的情况下,让我们看一下这个例子。
dt = Open( "$SAMPLE_DATA/Air Traffic.jmp" );
dt << Select Where(:Airline == "Delta" & :Event == "Arrive");
如您所见 - 您可以选择满足两个不同列的两个不同条件的行。
在你的情况下 - 如果PM#=2 和 Logistic#=1 指的是 2 个不同的表 - 然后您需要根据您所追求的公共列连接这些表。
如果两者都不是,请提供实际样本数据。