脚本中“更新”功能的解决方法JMP 社区您好,
我有一个数据表依赖于另一个数据表。 我尝试使用更新功能更新它,但似乎没有任何作用。 相反,此脚本所做的是使用所选子集打开一个新的数据表窗口,而不是更新当前表。 如何让它用“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),);回复:脚本中“更新”功能的解决方法Match 需要指定尽可能多的列以使其唯一。 因此,您可能需要多列匹配,例如:实验名称==:实验名称、:Stack==:Stack、:Wafer Code==:Wafer Code、:Metrology Recipe==:Metrology。
这些只是建议。
您需要选择哪些列使每行唯一,然后进行相应的匹配。
回复:脚本中“更新”功能的解决方法所以我按照你说的做了并手动更新了表格,这是相关的代码
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 ) );
但是,它不会更新所有行,而是仅更新第一行并为所有行复制该行,如下所示。 我需要对所有行循环它吗?
回复:脚本中“更新”功能的解决方法在这行代码中,“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 Data table.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));
您没有提到哪个表是依赖的。 默认情况下,子集表是不相关的。
日志文件报告什么?