开始数据更新你好
我有一张桌子,想将空卷更新为 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”更改为“第 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。因此,正如@jthi所解释的那样,只需删除该行即可。
回复:开始数据更新有 2-3 个技巧可以解决此类问题:
- 名称表达式(作为列(...))
- Eval(替代(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 = 名称表达式(作为列(列(dt,3)));
Eval( 替代( Expr( dt << 重新编码列( _col_,
{映射值( _rcOrig, {14, 0}, 不匹配( _rcNow ) )},
更新属性( 1 ),
目标列( _col_ )))
Expr( _col_ ), 名称 Expr( my 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 )
)
);其中 Column(XXX)可以替换为
- 作为列(列(“性别”))
- 作为 Column(dt, “性别”)
- 作为列(“性别”)
- 作为列(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(...))
- 也不是名称表达式(作为列(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 列内的数字已发生变化)

回复:开始数据更新
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 :第二个参数被评估;列表保持原样(列表不被评估)
- Print(5) & Print (6) → 命名参数的参数被求值
- Print(1) :现在第一个参数被评估——为什么是两次?
- 打印(3) :6次(!)(与要替换的值无关)
- 再次打印(1) :?
- [Print(.) :已评估,但阻止 Jmp 正确获取列信息 → /* 我将它们放入注释中 */]
- Print(4) :未显示 → 此处不符合预期 → 错误 → 值被替换为“。” (而不是 0)
- :height : 返回值:目标列
回复:开始数据更新(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 开发高效、稳健的应用程序中讨论了“两次求值”的表达式
=(A)
如果这个“标准”被阻止(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<<结束数据更新;