条件语句、操作和删除列<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />大家好,
我在使用 JSL 脚本时遇到问题,我研究了文档、书籍和用户论坛以寻求答案。
我在 JSL 中编写了一个包含条件语句的脚本,其中一个“结果”是执行删除行之类的操作。这可以在条件语句中完成吗?
让我们使用这个示例代码:
NE3=3;
NE4=5;
/* 这些变量可以取不同的值。 */
如果 (NE3==NE4,
新编号 = NE3,
NewNum = 索引 (NE3, NE4)
);
如果 (NewNum == 0,
打印(“不删除”),
当前数据表()<<删除列(NewNum)
);
如您所见或猜到的,我无法删除列。更重要的是,我使用了第一个条件语句,因为我希望它创建一个范围或单个值。
但是,我不确定如何使用 0 作为值,因为 JMP 无法删除不存在的内容(即第 0 列)。任何建议将不胜感激!
非常感谢,
ķ
回复:条件语句、操作和删除列Index() 给出一个列向量,因此是双括号。 尝试转置矩阵。
DC_List1 =作为列表(转置(指数( DC1 , DC2 ))) ;
DC_List2 =作为列表(转置(指数( DC3 , DC4 ))) ;
回复:条件语句、操作和删除列我一直在更多地使用条件语句和删除列。我用它玩了一些,我明白你的意思是删除列采用单个列名或索引或列名或索引列表。但是,在运行给定代码并仅针对删除列操作进行隔离并创建索引列表之后,我仍然无法删除列的全部索引。例如:
假设 dt 有 13 列,我想删除前三个 (1-3) 和后两个 (12-13)。
DC1 = 1 ;
DC2 = 3 ;
DC3 = 12 ;
DC4 = 13 ;
DC_List1 =作为列表(指数( DC1 , DC2 )) ;
DC_List2 =作为列表(指数( DC3 , DC4 )) ;
DC_List3 = DC_List1 || DC_List2 ;
当前数据表() <<删除列( dc_list3 ) ; /* 只删除第一列 b/c,即第一个变量的值。 */
/* 即使只删除一个已创建的列表,它仍然会失败。 */
当前数据表() <<删除列( dc_list1 ) ; /* 仅删除第一列 b/c,即第一个变量的值。 */
节目( dc_list1 ) ; /*dc_list1 = {{1, 2, 3}}; */
节目( dc_list3 ) ; /* dc_list3 = {{1, 2, 3}, {12, 13}}; */
我知道“作为列表”函数将矩阵转换为列表,但我不明白为什么它会给它双花括号。我认为这就是我为此抛弃我的代码的原因。我尝试了许多组合都无济于事。有什么想法/建议/帮助吗?非常感谢您的帮助!
回复:条件语句、操作和删除列一点批评都没有!我要了。我认为这可以帮助我(和 JMP 社区)解决问题并处理更精细的细节。我学到了很多东西,我很感激你花时间回答我的问题并教我那些重要的细节。
回复:条件语句、操作和删除列您可以在条件语句中运行一条语句或 1000 条语句。您可以在条件语句中执行可操作的语句,如我的代码所示。
您的语法在某些方面不正确。
如果 (NE3==NE4,
新编号 = NE3,
NewNum = 索引 (NE3, NE4)
);
此 IF 语句的结果是 newnum 是数字或矩阵。这没关系,但可能有点令人困惑,因为 newnum 用于两种不同类型的值(数字和矩阵)。但这会导致下一个 IF 语句出现问题,如下所示。
如果 (NewNum == 0,
打印(“不删除”),
当前数据表()<<删除列(NewNum)
);
这确实是问题所在。如果 NE3 和 NE4 为 0,Newnum 只会为 0。如果您从前面的 IF 语句中得到一个矩阵(当 NE3 不等于 NE4 时),那么 NewNum 与 0 的比较没有意义。最后,您的删除列语句仅在 newnum 是整数或列表时才有效。所以 AS LIST 语句是必不可少的。
我希望这会有所帮助——这旨在作为建设性的批评。
我在第一次学习 JSL 时遇到了很多困难,尤其是 IF 语句!我开发了一种样式,其中包含注释,显示语句的 THEN 和 ELSE 部分在哪里。例如:
如果(时间选择== 1 ,
// 然后
日期子句= “当前的” ;
案例列表= { 1 , 2 , 3 , 4 } ;
// 别的
,
日期子句= “累积” ;
案例列表= { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
) ;
回复:条件语句、操作和删除列谢谢你的帮助!我真的很感激。一个对条件语句至关重要的问题:您能否在条件语句中执行可操作(也就是删除和/或添加列、行、dt)?我不明白为什么代码没有删除指定的列。仅仅是因为我的示例语句中缺少 as list 函数吗? 还是我的语法关闭了?我仍在学习 JSL 中条件语句的所有细节,我看到您使用分号将一些表达式“粘合”在一起。再次感谢!
回复:条件语句、操作和删除列这有点棘手。删除列采用单个列名或索引,或列表列名或索引。这个程序可以解决问题。注意清单将矩阵转换为列表的函数:
NE3 = 3 ;
NE4 = 5 ;
/* 这些变量可以取不同的值。 */
dt =当前数据表() ;
数控= ncols ( dt ) ;
如果( ne3 > 0 & ne3 <=数控& ne4 > 0 & ne4 <=数控,
如果( NE3 == NE4 ,
dt <<删除列( ne3 ) ;
,
新列表=作为列表(指数( NE3 , NE4 )) ;
dt <<删除列(新列表) ;
) ;
) ;