如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我正在嘗試在 Col3 中編寫一個公式,將 Col1 的當前值與 Col2 的滯後值相加,但我遇到了一個問題,試圖弄清楚當遇到丟失數據時如何繼續從 Col2 中進行最後的觀察,並且在非缺失數據的第一個實例處使用該值。那是,
If( !IsMissing( Col1)
Col1 + Lag(Col2,1);
//create variable that contains current Col2 value;
//Else
Col1 + previously stored value from Col2;
);
我將不勝感激任何有關如何最好地實現這一目標的建議。謝謝。
| 排# |
第 1 列 |
第2欄 |
第3欄 |
|---|
| 1 |
2 |
1 |
|
| 2 |
1 |
3 |
2 |
| 3 |
1 |
5 |
4 |
| 4 |
2 |
7 |
7 |
| 5 |
。 |
。 |
|
| 6 |
。 |
。 |
|
| 7 |
。 |
。 |
|
| 8 |
2 |
8 |
9 |
| 9 |
2 |
9 |
10 |
| 10 |
1 |
11 |
10 |
| 11 |
。 |
。 |
|
| 13 |
。 |
。 |
|
| 14 |
2 |
12 |
13 |
| 15 |
2 |
13 |
14 |
| 16 |
1 |
14 |
14 |
| 17 號 |
2 |
15 |
16 |
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值感謝 Jerry 的精彩解釋並期待我下一個合併 ID 的問題!
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值抱歉,我沒有在之前的回復中提供更多解釋。 首先,要使公式適用於您的數據表,請將“If”語句中的“日期”列更改為“活檢結果”,並將日期差函數中的“小時”參數更改為您需要的任何時間間隔(即“日”) ):
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) )
)
)
現在進行解釋。 現有公式不會自動向後或向前索引,直到找到非缺失數據,因此我訴諸腳本來創建包含所需信息的變量。 如果您想了解有關腳本編寫的更多信息,幫助->書籍->腳本指南和幫助->腳本索引都是很好的資源。
“:Biopsy Result<
接下來,如果活檢結果缺失,則結果設置為缺失,否則,我們需要引用之前的非缺失日期來計算日期差異。 Contains(nm, Row()) 查找“nm”矩陣中當前行的位置。 從中減去 1 即可找到“nm”矩陣中前一行的位置。 現在這是具有上一個非缺失活檢結果的行中日期值的索引,即行號。 當沒有先前的非缺失行(即活檢結果的第一個實例)時,“Try”函數會忽略日期差異函數生成的錯誤。
有幾點需要記住,這假設您的數據是按 ID 號內的日期排序的(如您的示例所示)。 另外,如果數據表中有多個 ID 號,您可能需要添加另一個條件,這樣就不會比較兩個不同的 ID。 在這種情況下,您的公式/腳本可能如下所示:
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
If( :ID # == :ID #[nm[Contains( nm, Row() ) - 1]],
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) ),
.
)
)
)
我知道這是很多信息,但您確實說過您“渴望了解這一點”......希望這會有所幫助。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值您可能會發現數據表工具插件對這種情況很有幫助。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值謝謝杰瑞。 這看起來確實正是我所需要的。
不幸的是,我是這方面的新手,我仍然需要幫助弄清楚如何在我自己的數據庫和公式編輯器中自己重新創建它。 我已在我的數據中附加了對單個患者感興趣的列的非常簡化的版本。
在我的數據庫中,有許多行數據具有我們正在跟踪的實驗室值,但是,只有某些行具有活檢結果。 我想創建一個公式,該公式將使用“日期”列中的日期來計算活檢之間發生的日期差異。
不幸的是,我不明白您使用哪些函數來創建公式...例如...雖然如果多次使用“Ismissing”函數,我什至沒有在中看到“Loc Nonmissing”選項公式編輯器。
另外,“nm”是什麼意思...... 我假設“某種矩陣”,但我在公式編輯器中哪裡可以找到它?
抱歉打擾了,但我很想了解這一點,因為它看起來正是我所需要的。
再次感謝,
連續波
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值不幸的是,我看不到您提供的示例表,但是,隨附的文件可能會為您提供一種方法來獲取當前和以前的非缺失日期之間的差異。
第二列中的公式首先為“日期”列中的非缺失單元格建立行矩陣。 這提供了一種引用前一個非缺失行的方法,該行用作日期差異函數中的索引。
我確信還有其他想法可以做到這一點......
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我想做的是問這個問題......我的數據庫中給定患者(第一列中的點號)的兩個不同活檢(標記為 TCMR 的列)之間的日期差異是多少。 活檢以不規則的間隔進行,活檢的結果顯示在下面的第三列中。
儘管我知道如何檢索此信息,但如果我只是創建包含活檢結果的行的子集,然後詢問日期差異......我想做的是找出一種方法來確定日期差異在任何具有活檢結果的行之間,同時忽略空行。
@jerry_cooper寫道:
我認為這個公式會給你你所追求的:
If(Is Missing(:Column 1), :Column 1, Summation(i = 1, Row(), :Column 1))
希望這可以幫助。
-傑瑞
你能幫忙解決這個問題嗎? 理想情況下,我可以在公式編輯器中看到或粘貼到其中的解決方案。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我相信此回復是在 JMP 13 發布之前編寫的,該版本引入了 Col Cumulative Sum() 函數。 如果您使用的是 v13 或更高版本,創建累積總和列所需要做的就是右鍵單擊要求和的列的列標題,然後選擇新建公式列=>行=>累積總和。 這將使用適當的公式創建一個新列。 要在編輯器中查看公式,請右鍵單擊新列並選擇公式。
如果您使用的是早期版本,請將以下語句複製並粘貼到公式編輯器中以查看其外觀:
Summation(i=1, Row(), Your Column[i])
希望這可以幫助。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我認為這也正是我所需要的,但我不完全理解該腳本......是否可以在公式編輯器中顯示它的樣子......
非常感謝
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我一直遇到這個問題並使用Jerry給出的解決方案。 我分析從壓縮數據歷史記錄中檢索到的過程測量值(溫度、壓力、流量等)。 每幾千個點,就可能有一個缺失值。
下面的示例根據催化劑流量的 3 點移動平均值計算反應器是否正在運行,F.Cat >= 11(匿名是的,您會得到參考...)。 如果缺少 F.Cat,則 calc 將使用上一行的“正在運行?”值。
If(
Row() < 3, 0,
Is Missing( :F.Cat ), Lag( :Name( "Running?" ), 1 ),
(Lag( :F.Cat, 2 ) + Lag( :F.Cat, 1 ) + :F.Cat) / 3 >= 11, 1,
0
)
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />感謝大家的評論和幫助。
我認為傑里的建議最適合我,並且不需要使用我想要使用的局部變量。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我認為這個公式會給你你所追求的:
If( Is Missing( :Column 1 ),
:Column 1,
Summation( i = 1, Row(), :Column 1 )
)
希望這可以幫助。
-傑瑞
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我們是否總是能夠讓列公式具有自我引用性?我從來沒有意識到我能做到這一點。
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值謝謝吉姆和傑夫,
我認為我使問題變得比我的描述和表格佈局中需要的更加複雜,並且可以看到這如何導致您提出建議。
雖然我理解傑夫關於創建一個包含非缺失數據的新列的建議,但我希望在不創建新列的情況下完成我的工作,因為我將在許多不同的列中使用這個公式。讓我嘗試通過下表更清楚地說明我想要完成的任務。
我正在嘗試在第2 列中創建第1 列的運行總和。在不創建任何其他列的情況下,我希望創建一個變量,其中包含第2 列中的當前運行總和值,並將其添加到第1 列的值中。
我的問題是不知道創建和使用包含第 2 列當前值的變量的最佳方法,以便可以在缺少第 1 列數據的行之間“攜帶”該值。“我正在尋找的結果”列顯示了我希望第 2 列中的公式產生的結果。希望這個描述能更清楚地說明我想要完成的任務。

回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值我認為您的描述中有一個錯誤,我們必須先澄清該錯誤,然後才能為您提供準確的解決方案。 您的條件表示,如果 Col1 不丟失,則將其添加到 Col2 的滯後值,如果 Col1 丟失,則將其添加到先前存儲的 Col2 值。
您無法將缺失的 Col1 添加到任何內容並獲得除缺失以外的任何內容。
話雖如此,我會一次一列地構建這個表。 具體來說,我將使用以下公式創建一個沒有缺失值的“非缺失 Col2”列:

當 Col2 不缺失時,此公式將“非缺失 Col2”設置為 Col2;當 Col2 缺失時,將其設置為“非缺失 Col2”的滯後。

然後,您可以在最終公式中使用 Lag(non-missing Col2, 1)。
我希望這有幫助。
-傑夫
回复:如果不丟失,則使用以前的值的公式,否則使用最後佔用的單元格中的值這是有效公式的一種版本:
If( Row() == 1, lagval = . );
x = Sum( :col 1, lagval );
If( Is Missing( col 2 ) == 0,
lagval = :col 2
);
x;