脚本中“更新”功能的解决方法您好JMP社区,
我有一个依赖于另一个数据表的数据表。我尝试使用update函数对其进行更新,但它似乎无能为力。相反,此脚本正在执行的操作是使用选定的子集打开一个新的数据表窗口,而不是更新当前表。我怎样才能用“ dtU”的子集更新当前打开的数据表“ dt”?谢谢!
// Open Sample Data
dt = Open("KrF CDU Data table.jmp");
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains("KrF", :Type));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
// Updating with subset
dt << Update(With(dt1),By Matching Columns(name==name),);回复:脚本中“更新”功能的解决方法匹配需要指定尽可能多的列以使其唯一。因此,您可能需要按多个列进行匹配,例如:实验名称==:实验名称,:Stack ==:Stack,:Wafer Code ==:Wafer Code,:Metrology Recipe ==:Metrology。
这些只是建议。
您需要选择使每一行唯一的列,然后进行相应匹配。
回复:脚本中“更新”功能的解决方法在此代码行中,“名称”是指列名称。您没有显示所有的列名,但是在两个列中都肯定有一个名为“ name”的列吗?
gdt <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Update</SPAN><SPAN class="token punctuation">(</SPAN> With<SPAN class="token punctuation">(</SPAN> dt1 <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> Match Columns<SPAN class="token punctuation">(</SPAN> dt<SPAN class="token punctuation">:</SPAN>name <SPAN class="token operator">==</SPAN> dt1<SPAN class="token punctuation">:</SPAN>name <SPAN class="token punctuation">)</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN> <SPAN class="token comment">//This is still not runnin</SPAN>
尝试从“表”->“更新”菜单中手动执行此操作。 当获得所需的输出时,请查看左上方的源脚本(右键单击源,单击以查看该脚本),然后检查该代码以帮助将所需的内容准确地放入JSL中。
回复:脚本中“更新”功能的解决方法因此,我检查了匹配列的所有数据类型,它们是相同的:相同的顺序和相同的数据类型。这些列都没有功能。我已将数据集作为图像和当前代码附加。我完全迷失了,所以对您的任何帮助都将深表感谢。谢谢你们!
//Clean up
Clear Log(); Clear Globals(); //Close All(DataTables,"No Save");
// Open Sample Data
dtU = Open( "Exposure_Summary_Data.jmp" );
// Making subset of data
dtU << Clear Column Selection();
dtU << Select Where(contains(:Type,"KrF"));
Column(dtU,"F23")<< Set Selected(1);
dtU << Invert Column Selection;
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
// Opening other data table and updating
dt = Open("KrF CDU Data table 1.jmp");
dt << Update( With( dt1 ), Match Columns( dt:name == dt1:name ) ); //This is still not running
dt << Save( "KrF CDU Data table 1.jmp" );
回复:脚本中“更新”功能的解决方法由于我们看不到表格,因此这只是尝试的猜测
- 检查列名称是否存在于两者中,两者都具有相同的数据类型(可能是字符)和建模类型(可能是标称)。
- 使用:name ==:name或dt:name == dt1:name
- 检查dt中的任何列是否具有功能,尤其是要更新的列是否具有功能。我认为您必须在更新之前删除该功能。
那是一些故障排除的想法。
回复:脚本中“更新”功能的解决方法不知道我在这里是否正确解释了您要尝试执行的操作,但这是我的解释,带有一些示例数据。 您需要在stop()命令之后添加一个名为name的列。 这对我来说还行。
编辑:我想我误会了一些东西。... 您的意思是您要更新的表是锁定的,因为它是依赖的,就像摘要一样,JMP可能会强制创建新表。对此我不确定。
Clear Log();
Clear Globals();
//Close All( DataTables, "No Save" );
dt = Open( "$SAMPLE_DATA/Students.jmp" );
dtU = Open( "$SAMPLE_DATA/Big Class.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( :age == 12 );
Column( dtU, "age" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
stop();
// run up to here, create an extra column called name in the dt (students.jmp) with some names from dtU (big class), then run next line
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
回复:脚本中“更新”功能的解决方法尝试了更改,但没有更新KrF数据表(dt),而是仅打开一个新的子集,并且不更新表dt。我是否需要将两者都连接到odbc服务器?两个表仍在打开,因此JMP肯定会看到两个表。回复:脚本中“更新”功能的解决方法尝试改变
dt << Update( With( dt1 ), By Matching Columns( name == name ) );
至
dt << Update( With( dt1 ), Match Columns( name== name ) );
根据我脚本的注释行,我以前的加入尝试使用了前一种格式,并且当我更改更新时不起作用。语法不同
回复:脚本中“更新”功能的解决方法哎呀,打算把那行写成
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1));
但是,它仍然不会更新dt(“ KrF CDU数据表。jmp”)。我正在尝试使用暴露表(dtU)中的数据更新KrF数据表。
日志如下所示:
Name Unresolved: name in access or evaluation of 'name' , name/*###*/
In the following script, error marked by /*###*/
Clear Log();
Clear Globals();
Close All( DataTables, "No Save" );
dt = Open( "KrF CDU Data table.jmp" );
dtU = Open( "Exposure_Summary_Data.jmp" );
dtU << Clear Column Selection();
dtU << Select Where( Contains( :Type, "KrF" ) );
Column( dtU, "F23" ) << Set Selected( 1 );
dtU << Invert Column Selection;
dt1 = dtU << Subset( Selected Rows( 1 ), Selected Columns( 1 ) );
dt << Update( With( dt1 ), By Matching Columns( name/*###*/ == name ) );
那么更新行存在某种错误吗?我不确定,但这就是日志报告的内容
回复:脚本中“更新”功能的解决方法您的某些JSL看起来是错误或奇怪的:
dtU << Select Where(contains("KrF", :Type)); 那应该是
dtU << Select Where(contains( :Type, "KrF:));
另外,第二行看起来很奇怪,Selected Columns(1,:Wafer Code)和
dt1 = dtU << Subset(Selected Rows(1),Selected Columns(1,:Wafer Code));
您没有提到哪个表是依赖的。默认情况下,子集表不依赖。
日志文件报告什么?
回复:脚本中“更新”功能的解决方法所以我做了你所说的,并手动更新了表,这是相关的代码
Data Table( "KrF CDU data table 1" ) << Update(
With( Data Table( "Subset of Exposure_Summary_Data" ) ),
Match Columns( :Wafer Code = :Wafer Code )
)
所以,我直接将其应用于我的代码
dt << Update( With( dt1 ), Match Columns( dt:Wafer Code= dt1:Wafer code ) );
但是,与其更新所有行,不如更新第一行并为所有行复制该行,如下所示。我需要为所有行循环吗?