條件公式我正在嘗試添加一個以其他列為條件的列公式。 我有數據,其中“結果”列由“主題”和“產品”堆疊,在“時間”上具有多個值。 我正在嘗試計算“結果”中每個值的基線,以便:
新列 =“結果”– [“結果”值,其中針對特定主題/產品組合,時間=(1)]
謝謝
自動化和腳本編寫回覆:條件公式你能舉個數據例子嗎?這將有助於找到適當的解決方案。
回覆:條件公式如果您的資料按主題、產品、時間排序,那麼此範例將有效
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
dt:age << set name( "Subject" );
dt:sex << set name( "Product" );
dt:weight << set name( "Results" );
dt << New Column( "baseline",
formula(
If( Row() == 1,
valueTime1 = :Results,
If( :Subject != Lag( :subject ) | :Product != Lag( :product ),
valueTime1 = :Results
)
);
baseline = :Results - valueTime1;
)
);回覆:條件公式我已經包含了範例資料。 我需要添加一個新列,其中公式採用每個主題/產品組合的時間(-5)結果值,並從主題/產品組合中的每個結果中減去該值。
回覆:條件公式有時,透過幾個步驟解決此類問題比為列公式編寫複雜的 jsl 更容易。 這是一種使用「子集」提取 Time=-5 行,使用「更新」將它們連接回原始資料表的方法,然後在列公式中執行簡單的減法。 如果您正在執行 JMP 17,工作流程是建立和分享此類內容的好方法。
回覆:條件公式我想出的 JSL 並不太複雜。我沒有寫公式,而是寫了表格腳本。每當添加更多數據時,您都可以運行它。
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = :Results[val] );
For Each Row( dt, :New Column = :Results - OffsetArray[:Subject || :Product] );編輯
仔細查看表格後,我注意到一些:結果單元格中缺少值。您應該將它們重新編碼為 0 或稍微更改腳本:
dt = Current Data Table();
OffsetArray = Associative Array();
TimeRows = dt << Get Rows Where( :Time == -5 );
For Each( {val, idx}, TimeRows, OffsetArray[:Subject[val] || :Product[val]] = If( !Is Missing( :Results[val] ), :Results[val], 0 ) );
For Each Row( dt, :Results with Offset = :Results - OffsetArray[:Subject || :Product] );
回覆:條件公式只是猜測,因為沒有數據可以測試這一點
:Result - Col Min(If(:Time == 1, :Result, .), :Group);
編輯:
我們收到樣本資料後更新了公式
:Results - Col Min(If(:Time == -5, :Results, .), :Subject, :Product)