キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
Get the free JMP Student Edition for qualified students and instructors at degree granting institutions.
言語を選択 翻訳バーを非表示
最初に公開されたスレッドを表示

n連続行条件に基づいて新しい列を定義する方法

HSS
HSS
Level IV

こんにちは、みんな、

その要素がしきい値を満たす他の列の少なくとも 10 行の連続に依存する数式列を探しています。 添付の画像とデータをご覧ください。 これらには、必要な列「正しい障害領域」も含まれます。
助けてください。
ありがとう、HSS

undefined

 

 

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

1 件の受理された解決策

受理された解決策
jthi
Super User

Re: n 連続行条件に基づいて新しい列を定義する方法

データ テーブルの添え字付け1つのオプションです。

現在の列名を変更しました:

Names Default To Here(1);

dt = Current Data Table();

dt << New Column("a", Numeric, Ordinal,
 << Set Each Value(
  If(Row() == 1,
   val = 1; // this is breaking rule of > 750, so we define it separately
   change = 1;
  );

  next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
  over_limit = Sum(next_vals >= 750);

  If(change & over_limit >= 10,
   val++;
   change = 0;
  , over_limit < 10,
   change = 1;
  );

  val;
 )
);
9件の返信9
jthi
Super User

Re: n 連続行条件に基づいて新しい列を定義する方法

データ テーブルの添え字付け1つのオプションです。

現在の列名を変更しました:

Names Default To Here(1);

dt = Current Data Table();

dt << New Column("a", Numeric, Ordinal,
 << Set Each Value(
  If(Row() == 1,
   val = 1; // this is breaking rule of > 750, so we define it separately
   change = 1;
  );

  next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
  over_limit = Sum(next_vals >= 750);

  If(change & over_limit >= 10,
   val++;
   change = 0;
  , over_limit < 10,
   change = 1;
  );

  val;
 )
);

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

HSS
HSS
Level IV

Re: n 連続行条件に基づいて新しい列を定義する方法

ありがとうジャルモ、

それは完全に機能しています。 これをスクリプトに統合する必要があります。 それができることを願っています。
ありがとう、HSS

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

HSS
HSS
Level IV

Re: n 連続行条件に基づいて新しい列を定義する方法

ヤルモの皆さん、こんにちは。

このコードは正常に動作しており、スクリプトに完全に実装できます。

しかし一方で、私はそれを理解することができません。 少し修正したいのですが、なかなかできません。 その点で私を助けてくれませんか -
1. このステートメントは何をしているのか -

next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];

2. 「変更」のインクリメントがどこで行われているか、またこの条件をどのように満たすことができるかを理解できません。

If(change & over_limit >= 10,

私はそれが同じだと信じています - "If( change >=10 & over_limit >=10

3.現在の問題では、目的の領域が終了したら(最小10エントリで)カウンターを1つ増やしたいと思います-このようなもの-

undefined

助けはありますか?

ありがとう、HSS

 

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

HSS
HSS
Level IV

Re: n 連続行条件に基づいて新しい列を定義する方法

前のメッセージの添付画像に誤りがあります。 最後の赤い四角形は無視してください。誤って古い要件のカウンターも変更してしまいました。 そうであってはなりません。
ありがとう、HSS

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

jthi
Super User

Re: n 連続行条件に基づいて新しい列を定義する方法

私がお勧めするのは、スクリプトを次のように変更して、「行ごとに」実行できるようにすることです。

// Names Default To Here(1);
// Clear Log();
dt = Current Data Table();
run_script = Expr(
 If(Row() == 1,
  val = 1; // this is breaking rule of > 750, so we define it separately
  change = 1;
 );

 next_vals = :Current[Row()::Min(Dim()[1], Row() + 9)];
 over_limit = Sum(next_vals >= 750);

 If(change & over_limit >= 10,
  val++;
  change = 0;
 , over_limit < 10,
  change = 1;
 );
 val;
 show(row(), val, change, next_vals, over_limit);
 Write("\!N");
);

Row() = 1;
run_script;
Row() = 2;
run_script;
Row() = 5;
run_script;

次に、スクリプトを部分的に実行し、ログを見て何が起こるかを簡単に確認できます (必要に応じて、一度に 1 行ずつ実行することもできます)。

 

 

 

スクリプト ウィンドウと埋め込みログ:

undefined

Scripting Index は、Dim() などの関数の説明にも役立ちます。

 

これで十分でない場合は、この投稿にコメントしてタグ付けしてください。詳しく説明します。

 

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

HSS
HSS
Level IV

Re: n 連続行条件に基づいて新しい列を定義する方法

@jthi説明ありがとう。

行ごとに実行すると、かなりの量が得られました。

それでも、スクリプトに変数「変更」がある理由とその目的は何ですか? 現在の値を満たす 10 個を超えるエントリを連続して取得する場合は常に、1 (設定値として) と 0 のいずれかの 2 つの値を取ります。 ただし、新しい列のインデックス作成には表示されません。 しかし、変数「Change」なしで実行すると、正しいエントリが得られません。 しかし、それが計算/インデックス作成にどのように、そしてどこに影響を与えるかを理解することはできません.

問題の 3 番目の部分 - :current>=750 の目的の領域が終了したときに、実行中のインデックスを増やすにはどうすればよいですか?

ありがとう、HSS

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

jthi
Super User

Re: n 連続行条件に基づいて新しい列を定義する方法

変更は、必要に応じて val を増やすために使用されます。 問題 3 については、条件が変更されたため、アルゴリズムを書き直す必要があります。

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

HSS
HSS
Level IV

Re: n 連続行条件に基づいて新しい列を定義する方法

こんにちは@jthi

私は新しい要件で何かを試しました。 これは最善の解決策ではないかもしれませんが、回避策です。 そして、元の問題に対して提案した解決策に非常に近いです。 今のところ問題なく動作しています。

If( Row() == 1, val = 1 );
Next_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() + 9 ) )] >= 750 );
Previous_10_values = Sum( :Current[Index( Row(), Min( Dim()[1], Row() - 9 ) )] >= 750 );
If(
 Next_10_values == 10 & Lag( :Current ) < 750 | Previous_10_values == 9 & :Current < 750 &
 Lag( :Current ) >= 750,
 val = val + 1
);
val;

あなたの貢献には本当に感謝をしている。
よろしく、HSS

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。

jthi
Super User

Re: n 連続行条件に基づいて新しい列を定義する方法

アルゴリズムを次の 3 つの部分に分割します。

  1. 750 を超える十分な値がある場合はカウンターを増やします (サポート変数を設定する可能性があります)。
  2. AFTER で 750 を下回る値が 1 つでもある場合はカウンターを増やし、これを各ステップで 1 回だけ行います。
  3. カウンターを増加させない (サポート変数を設定する可能性があります)

これは、いくつかの追加のサポート変数を使用して行うのが最も簡単な場合があります (最も簡単ではないかもしれませんが、最も明確です)。

 

多分このようなもの:

If(Row() == 1,
 counter = 1;
 allow_over_limit_change = 1;
 allow_below_limit_change = 0;
);

current_vals_to_check = :Current[Row()::Min(Dim()[1], Row() + 9)];
over_limit_count = Sum(current_vals_to_check >= 750);

If(allow_over_limit_change & over_limit_count >= 10,
 counter++;
 allow_below_limit_change = 1;
 allow_over_limit_change = 0;
, allow_below_limit_change & :Current < 750,
 counter++;
 allow_below_limit_change = 0;
 allow_over_limit_change = 1;
);
counter;

Row() == 1 if ステートメントはおそらくこれに置き換えることができます (私の意見では、If ステートメントを使用するほど明確ではありません)

As Constant(counter = 1);
As Constant(allow_over_limit_change = 1);
As Constant(allow_below_limit_change = 0);

この投稿のオリジナルは 、English (US) で書かれており、ユーザビリティ向上のため自動翻訳機能を使用して表示しています。コメントを投稿すると、オリジナルの言語(English (US))やご指定の言語 でも表示されます。