他の 2 つの列の値に基づいて新しい列を作成するにはどうすればよいですか?こんにちは:
私は長年 JMP を使用していますが、スクリプト作成と数式エディターの使用について詳しく調べ始めたばかりです。 大きなテーブル (約 10K 行) があります。 興味のあるコラムがいくつかあります。
- Patient_ID: 各患者の一意の識別子
- 時間: ラボサンプルが収集された時点
- LAB_VALUE: 3 つの個別の可能性があるラボ パラメータの値 (NORMAL、MILD、SEVERE)
- SEX: 患者の性別
以下に基づいて「STATUS」という新しい列を作成したいと思います。
- Lab_Value のベースライン値が正常で、少なくとも 1 つのベースライン後の値が軽度または重度の場合、ステータス列に「1」のフラグを立てます。
- Lab_Value のベースライン値が軽度で、少なくとも 1 つのベースライン後の値が重大である場合、ステータス列に「2」のフラグを立てます。
- Lab_Value のベースライン値が Severe で、少なくとも 1 つのベースライン後の値が MILD または NORMAL の場合、STATUS 列に「3」のフラグを立てます。
すべての検査を完了する前に脱落する患者もいるから、これは少し複雑になります。 一部の患者はエンドポイント(372日目)までデータを持っていますが、他の患者はデータを持っていません。 そのため、脚本を書くのが難しくなります。これを行う方法を教えていただけますか? 数式機能を使用して大量の if ステートメントを作成しようとしましたが、機能させることができませんでした。 助けていただければ幸いです。
どうもありがとう
Re: 他の 2 つの列の値に基づいて新しい列を作成する方法は?親愛なるジム:
ありがとう、これはとても役に立ちました。 感謝してもしきれません。 あなたのスクリプトは私にとっては役に立ちました。
私は最終日、スクリプトに追加する方法を見つけるのに費やしました。 特に、LAB_VALUE の 4 番目のカテゴリを作成したいと考えています。 患者の検査値ステータスが以下の 3 つの条件のいずれも満たさない場合、4 番目のカテゴリ「4」としてフラグを立てたいと思います。
最後のif文に「,4)」を追加しようとしましたが、うまくいきません。 スクリプト編集者は、 、または ) が欠落していると不満を言い続けました。 または、一部の行は評価されません。 ご協力いただければ幸いです。
@txnelson書きました:
STATUS の値を設定する 1 つの方法を次に示します。あまり効率的なコードではありませんが、機能するはずです。完全にテストすることはできませんでしたが、ロジックは非常に単純です。
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);これを行うためのより効率的な方法は想像できますが、それは式として実装されるのではなく、一部の JMP プラットフォームを使用するスクリプトとして実装されます。
Re: 他の 2 つの列の値に基づいて新しい列を作成する方法は?STATUS の値を設定する 1 つの方法を次に示します。あまり効率的なコードではありませんが、機能するはずです。完全にテストすることはできませんでしたが、ロジックは非常に単純です。
dt = current data table();
dt << New Column( "STATUS", formula(
If( :TIME == "BASELINE",
theRow = Row();
thePatient_ID = :PATIENT_ID;
If(:LAB_VALUE == "NORMAL",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "SEVERE")
)
) > 0
,
1,
)
,
:LAB_VALUE =="MILD",
If( N Rows( dt << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
:LAB_VALUE == "SEVERE"
)
) > 0
,
2
)
,
:LAB_VALUE == "SEVERE"
If( N Rows( ct << get rows where(
Row()>theRow &
thePatient_ID == :PATIENT_ID &
(:LAB_VALUE == "MILD" | :LAB_VALUE == "NORMAL")
)
) > 0
,
3
)
)
)
)
);
これを行うためのより効率的な方法は想像できますが、それは式として実装されるのではなく、一部の JMP プラットフォームを使用するスクリプトとして実装されます。