別の列に表示される変数のシーケンスに基づいて列を作成する必要があるこんにちは、みんな、
に基づいて列を作成したい:クライアントIDおよびその回数 (シーケンスの回数は 1 カウントとしてのみカウントされます。「 :コメント列) データセットに表示されます。 私の要件は次のとおりです:最終要件そしてあったら嬉しいです:必須列 1同じように。 データの並べ替え・並べ替えができません。
何か助けてください?
どうもありがとう、-HSS

データのブレンディングとクリーンアップ品質およびプロセスエンジニアリングRe: 別の列に表示される変数の順序に基づいて列を作成する必要があるSQL クエリの使用 (特にグループコンキャット) または JMP のさまざまなテーブル操作 (分割、転置、列へのテキストの結合、列の結合、結合) は数式よりも簡単 (そして高速) かもしれませんが、たとえば次のように数式を使用して実行することもできます。ロック()さまざまな列のインデックス作成。
編集: インタラクティブなメソッドを追加しました
最初の分割データ:

次に、分割データを転置します。

転置されたデータから、まずテキストを列に使用して、Req2 と地域を互いに分離します。

次に、列の結合を使用して行列を結合します。

名前を変更して不要な列を削除すると、次のような結果になるはずです

これを元のデータと結合します2


余分な列を削除すると、必要なものが揃うはずです。
拡張ログにはスクリプトが用意されている場合がありますが、少しクリーンアップする必要がある場合があります。

Re: 別の列に表示される変数の順序に基づいて列を作成する必要があるこんにちは、みんな、
さらに要件があります - もう 1 つの列を追加する:要求_3 、からのすべてのテキストが:グループ組み合わせて保管することになります。 :グループテキストの長さは 2 行までです。 区切り文字は何でも構いません。
問題は、結合する必要があるセルの数が固定されておらず、列の値に依存することです。 :要求_1。
「Req_3」は必須です。
助けてください、ありがとう。

Re: 別の列に表示される変数の順序に基づいて列を作成する必要がある@jthi助けてくれてありがとう。
この方向に沿って取り組んでいきます。
Re: 別の列に表示される変数の順序に基づいて列を作成する必要がある最も簡単なのは、新しい列を作成し、:Client_ID (元の式) の代わりにそれをグループ化として使用することです。

Col Cumulative Sum(:"Concatenate[Region,Client_ID]"n != Lag(:"Concatenate[Region,Client_ID]"n), :"Concatenate[Region,Client_ID]"n)
そうしないと、累積合計で合計される部分が非常に速く複雑になります (これより簡単なものがあるかもしれませんが、これは :Region 変更時に間違った値を処理する必要があります)。
Col Cumulative Sum(
If(Row() == Col Minimum(Row(), :Client_ID, :Region),
1
,
:Client_ID != Lag(:Client_ID)
)
, :Client_ID, :Region
)
Re: 別の列に表示される変数の順序に基づいて列を作成する必要がある@jthi Col Cumulative Sum は機能しますが、グループ化変数 :Region を使用したループ/開始点の正しい初期化が見つかりません。
他に何か提案はありますか?
ありがとう
Col Cumulative Sum( :Client_ID != Lag( :Client_ID ) & :Region == Lag( :Region ), :Client_ID )
Re: 別の列に表示される変数の順序に基づいて列を作成する必要があるこのような連想配列を使用したい場合は、まず新しい「グループ化」列を作成する必要があります。 複数のグループ化列がある場合は、Col Cumulative Sum を使用する方が簡単かもしれません (常に簡単かもしれません。これを思いついただけです)。 正しい比較とグループ化を理解する必要があります
Col Cumulative Sum(:Client_ID != Lag(:Client_ID), :Client_ID)
Re: 別の列に表示される変数の順序に基づいて列を作成する必要があるこんにちは@jthi , 別の列を使用して「関連付けられた配列」でもグループ化を行うことはできますか? このようなもの ? 「関連付けられた配列(:クライアントID, :リージョン)」私のデータセットには 700,000 行を超える行がありますが、associate コマンドはまだ機能しますか? グループ化できれば:地域、まだ 10000 行を超える可能性があります。 いずれにせよ、これは必ず試してみます。
助けてくれてありがとう。 よろしく、 - HSS
Re: 別の列に表示される変数の順序に基づいて列を作成する必要があるここでは、連想配列を使用して値を保存し、必要に応じて増加させると機能するはずです。
必須列 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^");
));
