データ更新を開始こんにちは
テーブルがあり、空のボリュームを0に更新したい

列「19-04-2024」を更新するスクリプトを作成しました
問題は、列の名前を変更できることです。列(3)または列(4)を使用することを好みます。
しかし、それは機能しません。
スクリプトを修正していただけますか?
dt << データ更新の開始;
dt << 列を再コード化 (
dt << 列 (3)、
{マップ値(_rcOrig、{.、0}、不一致(_rcNow))}、
プロパティの更新(1)
対象列(列(3)) );
dt << データ更新終了;
自動化とスクリプトウィンドウズRe: データ更新の開始AsColumnはここで機能するようです
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
これは、データテーブルの添え字を使用する可能性が高い単純なケースです。データテーブルの添え字
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1::10, 4] = .;
missing_rows = Loc(dt[0, 4], .);
dt[missing_rows, 4] = 0;
Re: データ更新の開始何かがおかしい
簡単なスクリプトを使用して、列「19-04-2024」の空のボリュームを0に変更しようとしました
dt[1::10, 3] = .;
行が見つからない場合、Loc(dt[0, 3], .);
dt[行が欠落している、3] = 0;

しかし、スクリプトは空の値を0に変更するだけでなく、14.3%と21.3%も0に変更します。

実際、私のスクリプトはうまく機能していますが、 dt :"19-04-2024"を "column 3" に変更する方法がわかりません。
dt << データ更新の開始;
dt << 列を再コード化 (dt :"19-04-2024",
{マップ値(_rcOrig、{.、0}、不一致(_rcNow))}、
プロパティの更新(1)
ターゲット列( :"19-04-2024" ) );
dt << データ更新終了;
Re: データ更新の開始この部分
dt[1::10, 4] = .;
デモンストレーションの目的でいくつかの欠損値 (列 4 の最初の 10 行) を追加するだけなので、削除できます。
Re: データ更新の開始はい、コマンドライン
dt[1::10, 3] = .;
3 番目の列の 1 行目から 10 行目までのすべての値を空に設定します。スクリプトの残りの部分では、空の値を 0 に置き換えます。したがって、 @jthiが説明したように、行を削除するだけです。
Re: データ更新の開始このような問題を解決するには、2~3 つの方法があります。
- 名前 Expr(As Column(...))
- 評価(置換(Expr(),..., ...)))
- 3 つ目がある場合は、こちらを参照してください: JMP での式の処理: ヒントとトラップドア
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( dt, 2 ) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);
Re: データ更新の開始こんにちは
あなたの提案をよく理解していれば、スクリプトの「19-04-2024」を変更するということです。
しかしエラーが発生しました。どこが間違っているか確認してもらえますか?
dt << データ更新の開始;
dt << 列を再コード化 (dt
( my col = Name Expr( As Column( Column( dt, 3 ) ) );
評価( 置換( エクスプレ( dt << 列を再コード化( _col_,
{マップ値(_rcOrig、{14、0}、不一致(_rcNow))}、
プロパティの更新(1)
対象列( _col_ ))),
Expr( _col_ )、名前Expr( 私のcol ))) )、
{マップ値(_rcOrig、{.、0}、不一致(_rcNow))}、
プロパティの更新(1)
ターゲット列( :"19-04-2024" ) );
dt << データ更新終了;
Re: データ更新の開始アイデアは次のとおりです。
柔軟に使用できるモジュールを取得します。ハンドルはmy col です:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
my col = Name Expr( As Column( XXX) );
Eval(
Substitute(
Expr(
dt << Recode Column(
_col_,
{Map Value( _rcOrig, {14, 0}, Unmatched( _rcNow ) )},
Update Properties( 1 ),
Target Column( _col_ )
)
),
Expr( _col_ ), Name Expr( my col )
)
);ここで、 As Column(XXX)は次のように置き換えることができる。
- 列として (列 ("性別"))
- Column(dt, "sex") として
- 列として("性別")
- コラム(3)
- 列(dt, 3)として
- あなたの場合:
列として(dt, "19-04-2024")
または単にAs Column("19-04-2024")
編集:
Jarmoが以前の投稿で示しているように: https://community.jmp.com/t5/Discussions/Begin-Data-Update/mp/752334/highlight/true#M93383 、 Recode Columnについては、実際は
- Eval(Substitute(...)) も必要ありません
- Name Expr(As Column(xxx))も同様です
... Recode Column(AsColumn(xxx)...)で十分です。
おお!
Re: データ更新の開始この部分だけが必要です
dt << Recode Column(
AsColumn(dt, 4),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(AsColumn(dt, 4))
);
AsColumn 内で列インデックスを定義します。
このようなテーブルがあったら

列インデックス1と3の欠損値を置き換えたい場合は、
dt << Recode Column(
As Column(dt, 1),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 1))
);
そして
dt << Recode Column(
As Column(dt, 3),
{Map Value(_rcOrig, {., 0}, Unmatched(_rcNow))},
Update Properties(1),
Target Column(As Column(dt, 3))
);
(列内の数字は変更されました)

Re: データ更新の開始
dt = Open("$SAMPLE_DATA/Big Class.jmp"); <BR />dt << Recode Column(
/*Print(.);*/AsColumn(dt, Print(1);2),
Print(2);{Print(3);Map Value(_rcOrig, {12, Print(4);0}, Unmatched(_rcNow))},
/*Print(0);*/Update Properties(Print(5);1),
/*Print(0);*/Target Column(/*Print(.);*/AsColumn(dt, Print(6);4))
);与える
2
5
6
1
1
3
3
3
3
3
3
1
:height
- Print(0) : ここではコマンドは期待されません → エラーメッセージ → /* コメントに入れました */
- 印刷 2 : 2 番目の引数が評価されます。リストはそのまま残ります (リストは評価されません)
- Print(5) & Print(6) → 名前付き引数の引数が評価される
- Print(1) :ここで最初の引数が評価されます。なぜ2回なのでしょうか?
- 印刷(3) : 6回(!) (置換する値に依存しない)
- 印刷(1) : もう一度?
- [Print(.) :は評価されますが、Jmp が列情報を正しく取得するのを妨げます → /* コメントに入れました */]
- Print(4) : 表示されない → ここでは予想外 → エラー → 値は「.」に置き換えられます (0 ではなく)
- :height : 戻り値: 対象列
Re: データ更新の開始(A)で
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt[1,"age"]=4;
row()=1;
AsColumn(dt, tmp=As Column(2);print(tmp);tmp /*=4*/); // column #4 , row #1= 59<BR />Sum(As Column(2) ,7) // 4 + 7 = 11<BR />As Column(2)の結果は列 #2 ではなく、列 #2 (行 #1) の値です。
(B) 一方、 Recode Column()の最初の引数は、 As Column()が列参照を返すレベルまでしか評価されません。
...現在の行の値ではありません (最初の例のように)。
Target Column()引数の引数も同様です。
@joseph_morgan は、「JSL を使用して効率的で堅牢なアプリケーションを開発する」で、 「2 回評価される」式について講演しています。
= (あ)
この「標準」が阻止されると(B)、それは魔法のように感じられます:)
Re: データ更新の開始それで、 JSL エディターの高度な構文強調表示に関してですが、関数は引数を評価しますか?おそらく 3 番目の色が必要でしょうか?
Re: データ更新の開始こんにちは
dt :"19-04-2024"をdt [1::10, 4] に変更しようとしましたが、空のボリュームが 0 に変更されません。
どこが間違っていたか確認してもらえますか?
dt << データ更新の開始;
dt << 列を再コード化 ( dt [1::10, 4] ,
{マップ値(_rcOrig、{.、0}、不一致(_rcNow))}、
プロパティの更新(1)
ターゲット列( dt[1::10,4] ));
dt << データ更新終了;