如何替換空行直到下一個條目(並繼續)?親愛的 JMP 社區,
(W10、64 位、JMP 15.0 專業版)
我有一個從 Excel 文件導入的大型數據表,並且需要在列的空行中填充上一個列表的條目。 我正在嘗試編寫 JSL 從左側的一列轉到右側的一列,如下所示:

我認為編碼應該很容易,但我遇到的問題是正確地停止在前一個產品的末尾並從新產品開始。 我一定沒有正確循環。
歡迎任何建議/幫助。
謝謝!,
DS
回复:如何替換空行直到下一個條目(並繼續)?幾位 JMP 系統工程師反复研究這個問題,這是最好的解決方案。 @Brady Brady 的最終版本比我們開始使用的簡單公式更快、更穩健。 我已經使用它很多年了,發現它在很多情況下都能很好地工作。 很高興它對你有效!
回复:如何替換空行直到下一個條目(並繼續)?你好@Byron_JMP ,
感謝您在上一篇文章中提供的腳本調整代碼。 這個比我的解決方案更好,因為它檢查列中的第一個條目是否丟失,如果缺少,它將用下一個現有條目替換它,我發現這種情況發生在我引入的幾個導入中。 我對那裡的一些腳本解決方案沒有經驗,例如如何使用 vec 和矩陣信息來搜索某些內容。 不管怎樣,我把它應用到了我的具體問題上,並且毫無問題地解決了它。
謝謝!,
DS
回复:如何替換空行直到下一個條目(並繼續)?我找不到執行相同操作的 JSL 函數或消息。 我認為它不存在。 有一個 Main Menu() 函數,但該命令與所選列關聯,而不是與 JMP 主菜單關聯。
回复:如何替換空行直到下一個條目(並繼續)?我不知道交互式解決方案背後的 JSL 代碼。 這應該沒問題,因為你有多種選擇。
我確實知道交互式解決方案與某些腳本一樣可以同時應用於多個列。 只需選擇所有列並右鍵單擊,選擇“填充”選項即可。
回复:如何替換空行直到下一個條目(並繼續)?這些是一些 JSL 註釋,如果您正在編寫解決方案腳本,它們將為您提供幫助
//better version of Fill in Missing Cells, by Brady Brady
Names Default To Here( 1 );
dt = Current Data Table();
dtcollist = dt << get column names;
dlg = Dialog( "Select Column", vlist( selection = List Box( dtcollist ), button( "OK" ) ) );
Remove From( dlg, 2 );
Eval List( dlg );
dtMat = (dt << Get All Columns As Matrix);
For( i = 1, i <= N Items( selection ), i++,
colNum = Contains( dtColList, Name Expr( selection[i] ) );
vMat = dtMat[0, colNum];
mis = Loc( Is Missing( vMat ) );
If( N Row( mis ),
col = column(selection[i]);
If( mis[1] == 1,
col[1] = col[(Loc( vMat ))[1]]
);
For( j = if(mis[1]==1, 2, 1), j <= N Row( mis ), j++,
col[mis[j]] = col[mis[j] - 1]
);
);
);
///////////////////////////// short tweak for scripting
dtcollist=dtnr<<GET column="" names=""></GET>
回复:如何替換空行直到下一個條目(並繼續)?有一個非常棒的插件,一個必須具備的插件數據表工具
那裡有一個插值工具可以做到這一點,還有更多。 而且它比大桌子上的公式快得多。

回复:如何替換空行直到下一個條目(並繼續)?你好@丹_奧伯米勒,
感謝您對此的提醒。 我見過“填充到末尾”、“到行”或“填充”模式,但以前沒有見過。
您知道執行此操作的 JSL 代碼嗎? 我問的原因是我希望這一切都在JSL 代碼中,因為我正在讀取幾個文件來構建一個大型數據表,並且需要自動化該過程,以便最終用戶只需運行腳本並輸出他們的表,其中沒有缺失值產品。 如果它比我的解決方案更快、更優雅,我想修改代碼並將其插入到我的腳本中。
謝謝!,
DS
回复:如何替換空行直到下一個條目(並繼續)?您有一個可以完成這項工作的腳本,但也有一個交互式解決方案。 選擇需要替換的列,以便選擇所有行。 右鍵單擊該列的數據網格,然後選擇填充 > 用以前的值替換缺失值。

回复:如何替換空行直到下一個條目(並繼續)?你好@蒂埃里_S ,
您的公式可能會起作用,但我無法讓它與我擁有的特定表格完美配合。 我發現的一個問題是,有時我有幾行一個接一個地更改產品,並且滯後不起作用。
我確實想出了這段代碼,它運行得很好。 它不是很優雅,但是很有效!
感謝您的幫助!,
DS
RowReplace = dt << Get Rows Where( :Product != "" );
RowEnd = RowReplace;
Remove From( RowEnd, RowEnd[1] );
Insert Into( RowEnd, N Rows( dt ) );
For( l = 1, l <= N Items( RowReplace ), l++,
For( irow = 2, irow <= RowEnd[l], irow++,
If( Is Missing( :Product[irow] ) == 1,
:Product[irow] = :Product[RowReplace[l]],
)
)
);
回复:如何替換空行直到下一個條目(並繼續)?嗨,這是一個簡單的公式來解決這個問題
If( Is Missing( :Column 1 ),
Lag( :Column 2, 1 ),
:Column 1
)
最好的,
TS