腳本中「更新」功能的解決方法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));
您沒有提到哪個表是依賴的。 預設情況下,子集表是不相關的。
日誌檔案報告什麼?