列の数式で「for ループ」を使用できますか?こんにちは、みんな、
これら 2 つの操作 (新しい列の作成と ForLoop の実行) を 1 つに結合する方法はありますか?
列内で顧客 ID を繰り返しましたが、ある時点で変化し、2 番目の ID が繰り返し、次に 3 番目の 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]
)
);
なにか提案を?
ありがとう、ハリ
高度な統計モデリング自動化とスクリプト作成消費者および市場調査コンテンツの構成データアクセスマスカスタマイゼーション品質およびプロセスエンジニアリングRe: 列の数式で「for ループ」を使用できますか?はい、私は 2 番目のタイプの解決策を探していました。
ありがとう。
Re: 列の数式で「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;
)
);
Re: 列の数式で「for ループ」を使用できますか?こんにちは、ネルソン、それについて考えましたが、それは私が探しているものではありません。
あなたが提供したスクリプトは、以下のようなものを提供します。 そして私が探しているのは赤い糸の中にあります。

また、c1、c2 .... を置くのではなく、1、2、3 ... のようなものを置き、変化があるとすぐに 1 ずつ増加します。
何か助けはありますか?
Re: 列の数式で「for ループ」を使用できますか?ここにそれを行う1つの方法があります

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];
);