需要根據另一列中出現的變數序列建立一列大家好,
我想創建一個基於:客戶端_ID以及多少次(多個序列僅 1 次,請參閱:評論列)它出現在資料集中。 我的要求是:最終要求並很高興擁有:必填欄 1以及。 我無法重新排列/排序資料。
有什麼幫助嗎?
非常感謝,-HSS

資料混合與清理品質和工藝工程回覆:需要根據另一列中出現的變數序列建立一列使用 SQL 查詢(特別是群組連接)或 JMP 的不同表操作(拆分、轉置、文字到列並合併列、連接回來)可能比公式更容易(並且更快),但您可以使用公式來完成,例如使用洛克()以及不同欄位的索引。
編輯:新增互動方法
第一個分割資料:

接下來轉置分割資料:

從轉置資料中,首先使用文字到列將 Req2 和 Region 彼此分開

然後使用組合列來組合行列

重新命名並刪除不必要的列,您最終應該得到這樣的結果

將其與原始資料連接起來2


刪除多餘的列,您應該得到您需要的內容。
增強日誌可能已為您準備好腳本,但您可能需要稍微清理一下

回覆:需要根據另一列中出現的變數序列建立一列大家好,
還有一個進一步的要求 - 新增一列:Req_3 ,所有文字來自:團體將被合併並儲存。 :團體文字可以長達 2 行。 分隔符號可以是任何東西。
問題是 - 需要合併的儲存格數量不固定,這取決於列中的值:要求_1。
“Req_3”是必需的。
任何幫助,謝謝。

回覆:需要根據另一列中出現的變數序列建立一列@jthi感謝您的協助。
我會沿著這個方向努力。
回覆:需要根據另一列中出現的變數序列建立一列最簡單的事情是最有可能建立新列,然後使用它作為分組而不是:Client_ID(原始公式)

Col Cumulative Sum(:"Concatenate[Region,Client_ID]"n != Lag(:"Concatenate[Region,Client_ID]"n), :"Concatenate[Region,Client_ID]"n)
否則,以累積和求和的部分會很快變得更加複雜(可能有比這更簡單的部分,但這應該處理:區域變更上的錯誤值):
Col Cumulative Sum(
If(Row() == Col Minimum(Row(), :Client_ID, :Region),
1
,
:Client_ID != Lag(:Client_ID)
)
, :Client_ID, :Region
)
回覆:需要根據另一列中出現的變數序列建立一列@jthi Col Cumulative Sum 可以工作,但我無法使用分組變數:Region 找到循環/起點的正確初始化。
還有其他建議嗎?
謝謝
列累計和( :Client_ID != Lag( :Client_ID ) & :Region == Lag( :Region ), :Client_ID )
回覆:需要根據另一列中出現的變數序列建立一列如果您想像這樣使用關聯數組,則必須先建立新的「分組」列。 對於多個分組列,使用 Col Cumulative Sum 可能會更容易(可能總是更容易,只是想出了這個)。 你必須找出正確的比較和分組
Col Cumulative Sum(:Client_ID != Lag(:Client_ID), :Client_ID)
回覆:需要根據另一列中出現的變數序列建立一列你好@jthi ,我可以使用其他列來對「關聯數組」進行分組嗎? 像這樣的東西? “關聯數組(:Client_ID,:區域)”我的資料集有超過 700000 行,關聯命令是否仍然有效! 如果我可以分組:地區,它可能仍然有超過 10000 行。 無論如何,我一定會嘗試這個。
感謝您的協助。 問候,-HSS
回覆:需要根據另一列中出現的變數序列建立一列使用關聯數組來儲存值,然後根據需要增加應該可以在這裡工作。
必填列 1 的公式:
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
最終要求:
Eval Insert("^:Client_ID^_^:Required Column 2^");
範例腳本(使用不同的列名稱):
Names Default To Here(1);
dt = Open("$DOWNLOADS/data.jmp");
dt << New Column("Required Column 2", Numeric, Ordinal, Formula(
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
));
dt << New Column("Final Requirement 2", Character, Ordinal, Formula(
Eval Insert("^:Client_ID^_^:Required Column 2^");
));
