連続する条件の数を直接計算するにはどうすればよいですか?たとえば、「高さ」を例に挙げて、前の行の「高さ」よりも大きい行内の「高さ」の連続数を数えます。
行の「高さ」が前の行の「高さ」より大きいかどうかを判断するために補助列 h を追加し、前の行の「高さ」より大きい行の連続した「高さ」を数えました。 「高さ」が前の行の「高さ」より小さい場合は、再計算する必要があります。

この計算を 1 ステップで行うにはどうすればよいでしょうか?
これを試してみましたが、うまくいきませんでした:
if(:height>Lag(:height,1),row()-Contains(:height[Index(1,Row())],:height<LAG></LAG>
- ありがとう!
Re: 連続する条件の数を直接計算するにはどうすればよいですか?やあみんな、
しばらく時間がかかりましたが、最終的には、条件が true の場合に前の行に値を追加する方法を理解しました。
そこで、これを皆さんと共有したいと思います。これを使用して、グループ内の連続した値にタグを付けています。
皆さん、ありがとうございました。
乾杯!
If( Row() == 1,
、、
If( :master == Lag( :master ),
If( :roll - ラグ( :roll ) == 1、
:続きロール v3[Row() - 1] = 1、
。
)
)
)
Re: 連続する条件の数を直接計算するにはどうすればよいですか?こんにちはジョン、
エラーが表示されますが、必要な計算とチェックが行われません。私の最後の投稿では、それに近い新しいデータテーブルと式を示しています。
ありがとう
オンジャイ
Re: 連続する条件の数を直接計算するにはどうすればよいですか?2 番目の If には、等価性テストの == ではなく、代入用の単一の = があったように見えます。
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 連続する条件の数を直接計算するにはどうすればよいですか?やあ、
実際のデータセットの一部を添付します。:master によって連続する :roll の数を追跡しています。式は近いですが、差が 1 の場合に連続ロールの最初の出現の値を設定するためにまだ必要です。
If( :master == Lag( :master ),
If( Dif( :roll, 1 ) == 1,
Dif( :roll, 1 ),
。
)、
。
)
たとえば、差 = 1 であるため、行 8 と 11 の :sequential roll の値を 1 に設定する必要があります。

助けていただければ幸いです。
Re: 連続する条件の数を直接計算するにはどうすればよいですか?こんにちは、ジムさん
問題ない。数式の最終結果として何を求めているかを示すために列に名前を付けました。
キャロルの「希望者:名前」列を見てみます。
身長測定は3年連続(14歳、15歳、16歳)行われました。しかし、式は4を示します。
行ごとの年齢の差は 1 である必要があります。それが 1 <> の場合は空である必要があります。
値が <>1 になるまでラグを 1 ずつ増やす必要があります。これは、1年間の身長測定を怠った場合に通知されるはずです。

Re: 連続する条件の数を直接計算するにはどうすればよいですか?「desired by :name」という列のルールがわかりません。アリスの行の最後には欠損値が 1 つありますが、キャロルとクリスの行の最後には欠損値が 2 行あり、その後、クレイの欠損値は 1 行のみに戻ります。理解できません
Re: 連続する条件の数を直接計算するにはどうすればよいですか?やあ、
エラーは見つかりましたが、数式では依然として列 10 が期待どおりに計算されません。
アリスの身長は5年連続で測定されました。どの行が連続しているかを示す列が必要です。クレイは2年連続で身長測定をしただけだった。キャロルは 3 年連続で身長を測定しましたが、列 10 には 4 年と表示されています。

列 10 の式:
If( Row() == 1,
hCounter = 0,
If( Lag( :name ) == :name,
If( :age > Lag( :age, 1 ),
hCounter
++),
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 連続する条件の数を直接計算するにはどうすればよいですか?やあ 、
何が間違っているのかよくわかりませんが、If ステートメントがこのエラーを引き起こしています。

このため:
If( Row() == 1,
hCounter = 0,
If(
Lag( :name ) = :name,
If( :age > Lag( :age, 1 ),
Empty()
),
hCounter++, hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
Re: 連続する条件の数を直接計算するにはどうすればよいですか?Lag(:Name) != :Name であるかどうかを確認する IF() ステートメントを数式に追加するだけです。そうでない場合は、カウンターを開始点に戻します。
Re: 連続する条件の数を直接計算するにはどうすればよいですか?やあ、
私も同様の挑戦をしています。ただし、列内の連続する (1 ずつ増加する) 値の数を計算する必要があります。説明のために BigClass の例を添付します。

あなたの数式を使用して、:ageに基づいて列:hを計算しましたが、シーケンスの最初の値から始まり、:nameでグループ化される数式が必要です。
これは数式で実現できるのでしょうか?
よろしくお願いします。
オンジャイ
Re: 連続する条件の数を直接計算するにはどうすればよいですか?ここでループするのは良いアイデアです。
ジムさん、ありがとう!Re: 連続する条件の数を直接計算するにはどうすればよいですか?この問題には非常に簡単な解決策があります。
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
このバージョンでは、2 列ソリューションと同様に、条件を満たすラグが 0 である場合に欠損値が生成されます。結果の値を欠損値ではなくゼロにしたい場合は、以下を使用します。
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
hCounter;
2つの方法の完全な比較は次のとおりです
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column( "h",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( Row() == 1, 0, :height > Lag( :height, 1 ) ) )
);
dt << New Column( "Two Columns Used",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( If( :h == 1, Row() - Contains( :h[Index( 1, Row() )], 0, -1 ) ) )
);
dt << New Column( "All in one",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
If( Row() == 1,
hCounter = 0,
If( :height > Lag( :height, 1 ),
hCounter++,
hCounter = 0
)
);
If( hCounter == 0,
.,
hCounter
);
)
);