我们可以在列公式中使用“for循环”吗?大家好,
有没有办法将这两个操作(创建一个新列然后运行 ForLoop)合并为一个操作?
我在一列中重复了客户 ID,然后它在某个时刻发生了变化,第二个 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];
);