開始數據更新你好
我有一張表,希望將空卷更新為 0

我已經編寫了更新列“19-04-2024”的腳本
問題是列的名稱可以更改,我更喜歡使用列 (3) 或列 (4)
但它不起作用。
能更正一下腳本嗎?
dt << 開始資料更新;
dt << 重新編碼列 (
dt << 第 (3) 列,
{地圖值( _rcOrig, {., 0}, 不符合( _rcNow ) )},
更新屬性( 1 ),
目標列(第 (3) ) );
dt << 資料更新結束;
自動化和腳本編寫視窗回覆:開始數據更新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;
回覆:開始數據更新出問題了
我嘗試使用簡單的腳本將“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 << 結束資料更新;
回覆:開始數據更新這部分
dt[1::10, 4] = .;
是為了演示目的而添加一些缺失值(第 4 列的前十行),以便您可以將其刪除。
回覆:開始數據更新是的,命令列
dt[1::10, 3] = .;
將第三列中第 1 行到第 10 行的所有值設為空。腳本的其餘部分將空值替換為 0 。
回覆:開始數據更新有 2-3 個技巧可以解決這類問題:
- 名稱表達式(作為列(...))
- 評估(替代(Expr(),...,...)))
-如果有第三個,可以在這裡找到: JMP 中的表達式處理:Tipps 和 Trapdoors
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 )
)
);
回覆:開始數據更新你好
如果我很好地理解你的建議,那就是將: “19-04-2024”更改為你的腳本。
但我得到了錯誤。你能檢查一下我哪裡錯了嗎?
dt << 開始資料更新;
dt << 重新編碼列 (dt
(我的 col = Name Expr( As Column( Column( dt, 3 ) ) );
Eval( Substitute( Expr( dt << 重新編碼列( _col_,
{地圖值( _rcOrig, {14, 0}, 不符( _rcNow ) )},
更新屬性( 1 ),
目標列( _col_ ))),
Expr( _col_ ), 名稱 Expr( 我的 col ))) ),
{地圖值( _rcOrig, {., 0}, 不符合( _rcNow ) )},
更新屬性( 1 ),
目標列(:"19-04-2024"));
dt << 資料更新結束;
回覆:開始數據更新這個想法是:
取得一個可以靈活使用的模組,句柄是我的 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)可以替換為
- 作為列(列(“性別”))
- 作為列(dt,“性別”)
- 作為列(“性別”)
- 作為列(3)
- 作為列(dt, 3)
- 在你的情況下:
作為列(dt,“19-04-2024”)
或只是作為 Column("19-04-2024")
編輯:
正如 Jarmo 在之前的一些帖子中所示: https://community.jmp.com/t5/Discussions/Begin-Data-Update/mp/752334/highlight/true#M93383 ,實際上是Recode Column
- 甚至不需要 Eval(Substitute(...))
- 也不是名稱 Expr(As Column(xxx))
....重新編碼列(AsColumn(xxx)...)就夠了。
哇!
回覆:開始數據更新你應該只需要這部分
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))
);
(As Column 內的數字已更改)

回覆:開始數據更新
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) : 這裡不需要指令 → 錯誤訊息 → /* 我把它們放入註解中 */
- Print 2 :對第二個參數進行求值;清單保持原樣(清單不會被評估)
- Print(5) & Print (6) → 對命名參數的參數進行求值
- Print(1) :現在第一個參數被評估 - 為什麼兩次?
- Print(3) :6 次 (!)(與要替換的值無關)
- 列印(1) :再次?
- [Print(.) :進行評估,但阻止 Jmp 正確獲取列資訊 → /* 我將它們放入註釋中 */]
- Print(4) :不顯示 → 此處不期望 → 錯誤 → 值被「.」取代(而不是 0)
- :height : 傳回值: 目標列
回覆:開始數據更新(一)在
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 開發高效、健壯的應用程式中談論「評估兩次」的表達式
=(一)
如果這個「標準」被阻止(B),感覺就像魔法一樣:)
回覆:開始數據更新那麼,關於JSL 編輯器中的高級語法突出顯示 - 該函數是否評估它的參數? ,也許我們需要第三種顏色?
回覆:開始數據更新你好
我嘗試將dt :"19-04-2024"更改為dt [1::10, 4],但它不會將空卷更改為 0
你能檢查一下我哪裡錯了嗎?
dt << 開始資料更新;
dt << 重新編碼列 ( dt [1::10, 4] ,
{地圖值( _rcOrig, {., 0}, 不符合( _rcNow ) )},
更新屬性( 1 ),
目標列( dt [1::10, 4] ) );
dt << 結束資料更新;