欠落していない場合は前の値を使用する数式、欠落していない場合は最後に使用されていたセルの値を使用するCol1 の現在値と Col2 の遅延値を加算する数式を Col3 に記述しようとしていますが、欠損データが発生したときに Col2 からの最後の観測をどのように繰り越すかを理解しようとして困難に遭遇しています。欠損していないデータの最初のインスタンスでこの値を使用します。あれは、
If( !IsMissing( Col1)
Col1 + Lag(Col2,1);
//create variable that contains current Col2 value;
//Else
Col1 + previously stored value from Col2;
);
これを達成するための最善の方法についてご提案をいただければ幸いです。ありがとう。
| 行# |
列1 |
列2 |
列3 |
|---|
| 1 |
2 |
1 |
|
| 2 |
1 |
3 |
2 |
| 3 |
1 |
5 |
4 |
| 4 |
2 |
7 |
7 |
| 5 |
。 |
。 |
|
| 6 |
。 |
。 |
|
| 7 |
。 |
。 |
|
| 8 |
2 |
8 |
9 |
| 9 |
2 |
9 |
10 |
| 10 |
1 |
11 |
10 |
| 11 |
。 |
。 |
|
| 13 |
。 |
。 |
|
| 14 |
2 |
12 |
13 |
| 15 |
2 |
13 |
14 |
| 16 |
1 |
14 |
14 |
| 17 |
2 |
15 |
16 |
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式ジェリー、素晴らしい説明をしていただき、ID を組み込むという私の次の質問を予想してくれてありがとう!
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式申し訳ありませんが、以前の回答では詳しい説明ができませんでした。 まず、式をデータ テーブルで機能させるには、「If」ステートメントの「Date」列を「Biopsy Result」に変更し、Date Difference 関数の「Hour」引数を必要な間隔 (つまり、「Day」) に変更します。 
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) )
)
)
それでは説明です。 既存の数式は、欠損していないデータが見つかるまで自動的に前後にインデックス付けされないため、必要な情報を含む変数を作成するためにスクリプトを使用することにしました。 スクリプトについてさらに詳しく知りたい場合は、「ヘルプ」->「書籍」->「スクリプト ガイド」および「ヘルプ」->「スクリプト インデックス」が優れたリソースです。
「:Biopsy Result<
次に、生検結果が欠落している場合、結果は欠落に設定されます。そうでない場合は、日付差の計算のために以前の欠落していない日付を参照する必要があります。 Contains(nm, Row()) は、「nm」行列内の現在の行の位置を検索します。 ここから 1 を引くと、「nm」行列の前の行の位置がわかります。 これは、以前の欠落していない生検結果を含む行の日付値のインデックス、つまり行番号になります。 「Try」関数は、以前の欠落していない行 (つまり、生検結果の最初のインスタンス) がない場合、Date Difference 関数によって生成されたエラーを無視します。
留意すべき点がいくつかありますが、これはデータが ID # 内の日付で並べ替えられていることを前提としています (例のように)。 また、データ テーブルに複数の ID 番号がある場合は、2 つの異なる ID を比較しないように別の条件を追加することもできます。 この場合、式/スクリプトは次のようになります。
If( Row() == 1,
nm = Loc Nonmissing( :Biopsy Result << get values );
.;
,
If( Is Missing( :Biopsy Result ),
.,
If( :ID # == :ID #[nm[Contains( nm, Row() ) - 1]],
Try( Date Difference( :Date[nm[Contains( nm, Row() ) - 1]], :Date, "Day" ) ),
.
)
)
)
膨大な情報であることは承知していますが、「これを知りたかった」とおっしゃっていましたね...お役に立てれば幸いです。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式見つかるかもしれませんデータテーブルツールそんな時に役立つアドイン。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式ありがとうジェリー。 これはまさに私が必要としているもののように見えます。
残念ながら、私はこれに関して初心者であり、自分のデータベースと数式エディターでこれを自分で再作成する方法を理解するのにまだ助けが必要です。 データ内の 1 人の患者に関する関心のある列の非常に簡略化したバージョンを添付しました。
私のデータベースには、追跡している検査値を含むデータ行が多数ありますが、生検結果が含まれる行は一部のみです。 「日付」列の日付を使用して、生検が行われるたびに生検間の日付の違いを計算する数式を作成したいと考えています。
残念ながら、数式の作成にどの関数を使用したのかわかりません。たとえば...「Is missing」関数を何度も使用した場合、「Loc Nonmissing」のオプションさえ表示されません。数式エディター。
また、「nm」とはどういう意味ですか... 「何かの行列」だと思いますが、数式エディターのどこでそれを見つけることができますか?
面倒で申し訳ありませんが、まさに私が必要としているものと同じなので、ぜひ学びたいと思っています。
再度、感謝します、
CW
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式残念ながら、あなたが提供したサンプルテーブルを見ることはできませんが、同封のファイルは、現在と以前の欠落していない日付の差を取得するアプローチのアイデアを提供するかもしれません。
2 列目の数式は、まず、日付列の欠落していないセルの行の行列を確立します。 これにより、Date Difference 関数のインデックスとして使用される、欠落していない前の行を参照する方法が提供されます。
これを行うための他のアイデアがあると確信しています...
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式私がやろうとしているのは、データベース内の特定の患者 (最初の列の pt 番号) の 2 つの異なる生検 (TCMR というラベルの付いた列) の日付の違いは何ですか、という質問です。 生検は不規則な間隔で行われ、生検の結果は以下の 3 番目の列に示されています。
生検結果を含む行のみのサブセットを作成し、日付の違いを尋ねるだけでこの情報を取得する方法はわかっていますが、私がやりたいのは、日付の違いを判断する方法を見つけることです。空の行を無視して、生検結果のある任意の行から行までの間。
@ジェリー・クーパー書きました:
この式で求めているものが得られると思います。
If(Is Missing(:Column 1), :Column 1, Summation(i = 1, Row(), :Column 1))
お役に立てれば。
-ジェリー
これについて手伝ってくれませんか。 数式エディターで確認できる、または数式エディターに貼り付けることができるソリューションが理想的です。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式この応答は、Col Cumulative Sum() 関数が導入された JMP 13 のリリースより前に書かれたものだと思います。 v13 以降を使用している場合、累積合計列を作成するには、合計したい列の列ヘッダーを右クリックし、[新しい数式列] => [行] => [累積合計] を選択するだけです。 これにより、適切な数式を含む新しい列が作成されます。 エディターで数式を表示するには、新しい列を右クリックし、「数式」を選択します。
以前のバージョンを使用している場合は、次のステートメントをコピーして数式エディタに貼り付け、どのようになるかを確認します。
Summation(i=1, Row(), Your Column[i])
お役に立てれば。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式これもまさに私に必要なことだと思いますが、スクリプトを完全に理解できません...これが数式エディターでどのように見えるかを示すことは可能ですか...
本当にありがとう
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式私はいつもこの問題に遭遇し、ジェリーが提供した解決策を使用しています。 圧縮データヒストリアンから取得したプロセス測定値 (温度、圧力、流量など) を分析します。 数千ポイントごとに欠損値が発生する可能性があります。
以下の例では、触媒流量の 3 点移動平均、F.Cat >= 11 (匿名化されています、参照が得られます...) に基づいて反応器が稼働しているかどうかを計算します。 F.Cat が見つからない場合、calc は前の行の値「Running?」を使用します。
If(
Row() < 3, 0,
Is Missing( :F.Cat ), Lag( :Name( "Running?" ), 1 ),
(Lag( :F.Cat, 2 ) + Lag( :F.Cat, 1 ) + :F.Cat) / 3 >= 11, 1,
0
)
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />皆さん、コメントや助けをありがとうございます。
ジェリーの提案が私にとって最も効果的であり、私が使いたかったローカル変数の使用を必要としませんでした。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式この式で求めているものが得られると思います。
If( Is Missing( :Column 1 ),
:Column 1,
Summation( i = 1, Row(), :Column 1 )
)
お役に立てれば。
-ジェリー
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式列 Formula を自己参照にすることは常に可能でしたか?こんなことができるとは思ってもみませんでした。
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式ジムとジェフ、ありがとう。
私の説明と表のレイアウトで必要以上に問題を複雑にしてしまったと思います。それがどのようにあなたの提案につながったかがわかります。
欠損していないデータを保持する新しい列を作成するという Jeff の提案は理解していますが、この式をさまざまな列に使用するため、新しい列を作成せずに作業を完了したいと考えています。以下の表を使って、私が何を達成しようとしているのかをより明確にしてみましょう。
列 2 に列 1 の累計を作成しようとしています。追加の列を作成せずに、列 2 の現在の累計値を含む変数を作成し、それを列 1 の値に加算したいと考えていました。
私の問題は、列 2 の現在値を含む変数を作成して使用し、この値を欠落している列 1 データの行間で「運ぶ」ことができるようにする最適な方法がわからないことです。「探している結果」列には、列 2 の数式で生成したい内容が表示されます。この説明で、私が達成したいことについてもう少し明確になれば幸いです。

Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式あなたの説明に誤りがあると思います。正確な解決策を提供する前に、それを解決する必要があります。 条件は、Col1 が欠落していない場合はそれを Col2 の遅延値に追加し、Col1 が欠落している場合は以前に保存された Col2 の値に追加することを示しています。
欠落している Col1 を何かに追加して、欠落しているもの以外のものを取得することはできません。
そうは言っても、このテーブルは一度に 1 列ずつ作成します。 具体的には、次の式を使用して、欠損値がない「非欠損 Col2」列を作成します。

この式は、Col2 が欠落していない場合は「欠落していない Col2」を Col2 に設定し、Col2 が欠落している場合は「欠落していない Col2」のラグに設定します。

その後、最終的な式で Lag(non-missing Col2, 1) を使用できます。
それが役立つことを願っています。
-ジェフ
Re: 欠落していない場合は前の値を使用し、そうでない場合は最後に使用されていたセルの値を使用する数式機能する式の 1 つのバージョンを次に示します。
If( Row() == 1, lagval = . );
x = Sum( :col 1, lagval );
If( Is Missing( col 2 ) == 0,
lagval = :col 2
);
x;