JMP数据分析论坛

标题: 看来JSL的语法结构不是一成不变的 [打印本页]

作者: ak47ok    时间: 2018-8-16 16:56
标题: 看来JSL的语法结构不是一成不变的
这几天开始全面接触JSL,由于自己用惯VBA,觉得JSL的代码退缩、括号换行等很不适应,
将JSL代码按VBA的写法习惯来编写,试了几个效果是一致的。
就连公式也可按excel的公式习惯来进行
总体感觉还是VBA灵活,可能是我自己对JSL未熟悉的原因吧。

截图中的上、下代码是等效的



作者: wangtian4625    时间: 2018-8-16 18:28
JSL还是比较简单易懂的  ;另外JSL需要全部自己写  可以是系统直接生成   这比VBA好很多
作者: ak47ok    时间: 2018-8-17 09:41
呵呵,VBA也是绝大部分能通过录制宏得到,但录制的代码不是最理想的。

目前为止象VBA中字典方法,我在JSL中还是找不着北。

下面问题看看老师能否帮手解决,这问题用VBA的字典或高级筛选很易完成,但JMP好象要用"数据过滤器",
作者: ak47ok    时间: 2018-8-17 09:57
例如以Big Class.jmp为例,先按年龄降序,将所含所有年龄段及对应所含人数筛选出来,再统计出按这个排序的前4个年龄段的人数总和
如图所示,说明这个"人数总和"可只在缓存中保存即可、不用在表中显示,
在jsl如何快速完成?我还是搞不定,谢谢!

作者: ak47ok    时间: 2018-8-17 10:01
用"数据过滤器"可得到下图效果,但如何提取其中的结果搞不懂,且它只能升序?麻烦老师指导,谢谢!
作者: ak47ok    时间: 2018-8-17 10:13
补充:这个"年龄"数值要求是按动态的来、否则直接写个 >=14 就很易了,谢谢!我多虑了
作者: ak47ok    时间: 2018-8-17 11:48
dt << Summary( Group( :年龄 ), );
作者: ak47ok    时间: 2018-8-17 11:56
本帖最后由 ak47ok 于 2018-8-17 12:03 编辑

用循环的方式不知如何进行?
作者: ak47ok    时间: 2018-8-18 08:46
明白了,用了脚本索引,知道JSL的套路了。
作者: jiasongchen    时间: 2018-8-19 17:03
汇总后通过两步就可以实现。
1. 建立新列对年龄进行倒序编号。dt << new column("Rank", Formula(Col Rank(-:age) ) );
2. 计算前4的累计数量通过以下公式就可以得到  Col Sum( If( :Rank <= 4, :N Rows ) )
尝试看看是否可以
作者: ak47ok    时间: 2018-8-19 21:27
本帖最后由 ak47ok 于 2018-8-19 21:29 编辑
jiasongchen 发表于 2018-8-19 17:03
汇总后通过两步就可以实现。
1. 建立新列对年龄进行倒序编号。dt


谢谢版主,多得版主引导,使我入门了。

我直接用"表"的"汇总"操作,就是过程产生新窗口,在后面代码增加关闭窗口的代码。

我的同路径多个数据表文件、每个文件进行多次的决策树,批量循环操作已用JSL实现了。

dt << Sort( By( 8 ), Order( Descending ));Wait( 0 );
d1 << Summary( Group( 8 ), );Wait( 0 );
d2 << Sort( By( 1 ), Order( Descending ));Wait( 0 );
If( Col Number( 1 )>5,r1=5,r1=Col Number( 1 ));
s=sum(d2[1::r1,2]);
作者: ak47ok    时间: 2018-8-19 21:29
在JSL代码调试过程,好象 增加了Wait( 0 )会使窗口在显示、便于调试时的观察。




欢迎光临 JMP数据分析论坛 (http://www.jmpforum.net/) X3