我們可以在列公式中使用“for 循環”嗎?大家好,
有什麼方法可以將這兩個操作(創建新列然後運行 ForLoop)合併為一個操作嗎?
我在一列中重複了客戶 ID,然後它在某個時候發生了變化,第二個 ID 不斷重複,然後是第三個,依此類推。 我想創建一個新列,比如 Unq_Id,它的值應該是空的,直到 Customer_Id 發生變化。 我可以在下面的腳本中做到這一點,但我想知道是否有更好的方法來做到這一點? 這意味著 - 在列公式或類似的東西中運行循環!
dt << New Column( “Unq_ID”, Numeric, Continuous, Set Each Value() );
dt << Sort( by( :Customer_ID ), Order( Ascending ), Replace Table( 1 ) );
For( i = 1, i <= N Rows( dt ), i++,
If(
:Customer_ID[i] == :Customer_ID[i + 1]
,
:Unq_ID[i] = :Customer_ID[i]
)
);
有什麼建議嗎?
謝謝,哈里
腳本回复:我們可以在列公式中使用“for 循環”嗎?是的,我正在尋找第二種解決方案。
謝謝。
回复:我們可以在列公式中使用“for 循環”嗎?這裡有幾種創建所需列的方法

Names Default To Here( 1 );
dt = New Table( "custIDs",
New Column( "Customer_ID", character, values( {"c1", "c1", "c1", "c2", "c2", "c3", "c3", "c3"} ) )
);
dt << New Column( "Or like this" );
counter = 0;
For( i = 1, i <= N Rows( dt ), i++,
If(
i == N Rows( dt ),
counter++;
:or like this[i] = counter;,
:Customer_ID[i] != :Customer_ID[i + 1],
counter++;
:or like this[i] = counter;
)
);
// or
dt << New Column( "or like this using formula",
formula(
x = .;
If( Row() == 1, counter = 0 );
If( :Customer_ID != Lag( :Customer_ID, -1 ) | Row() == N Rows( Current Data Table() ),
counter++;
x = counter;
);
x;
)
);
回复:我們可以在列公式中使用“for 循環”嗎?嗨尼爾森,我雖然考慮過,但這不是我想要的。
您提供的腳本給了我如下所示的內容。 而我要找的那個就在紅色三角形的里面。

此外,而不是放置 c1、c2 .... 如何放置 1、2、3 ... 某種計數器,一旦發生變化,計數器就會增加 1。
有什麼幫助嗎?
回复:我們可以在列公式中使用“for 循環”嗎?這是一種方法

Names Default To Here( 1 );
dt = New Table( "custIDs",
New Column( "Customer_ID",
character,
values( {"c1", "c1", "c1", "c2", "c2", "c3", "c3", "c3"} )
)
);
For( i = 1, i <= N Rows( dt ), i++,
If( i == 1,
dt << New Column( Char( :Customer_ID[i] ), character );
Column( dt, :Customer_ID[i] )[i] = :Customer_ID[i];
,
If( :Customer_ID[i] != :Customer_ID[i - 1],
dt << New Column( Char( :Customer_ID[i] ), character )
)
);
Column( dt, :Customer_ID[i] )[i] = :Customer_ID[i];
);