为组中的独特案例添加计数器大家好,
为此,我如何编写一个整数值计数器来增加 A 组中 B 列中的唯一值?

到目前为止,这是我尝试过的:
dt_Table1 = Data Table("Table1");
dt_Table1 << New Column("Dataset", Numeric, "Nominal", Set Selected);
Sum1 = dt_Table1 << Summary(Group(:Group, :Date));
Sum2 = Sum1 << Summary(Group(:Group));
:N Rows << Set Name("N Datasets in Group");
dt_Table1 << Update(
with(Data Table(Sum2)),
Merge Same Name Columns
Match Flag(0),
Suppress foruma evaluation(0),
By Matching Columns(:Group = :Group),
Drop multiples(1, 0),
Include Nonmatches(0, 0),
Preserve main table order(1)
);
dt = dt_Table1;
For(i = 1, i <= :N Rows(dt), i++,
While(Group_Number = GetValue(:Group[i]),
N == Get Value(dt, :N Datasets in Group[i]),
For(j = 1, j <= N, j++,
:Dataset << Set Value == (j),
),
Group_Number = Group_Number + 1,
),
);
输出:


自动化和脚本基础数据分析与建模回复:为组中的独特案例添加计数器您应该能够使用 Col Rank()、Col Cumulative Sum、Col Min() 等函数的某种组合来执行此操作。 根据您的示例,Col Rank() 或 Col Cumulative Sum(1, ) 应该足够了(任何组中都没有重复日期)。
第 3 列使用 Col Rank 和 Column 4 Col Cumulative Sum 和 Column 5 一个更复杂的公式的一个选项
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(8),
Compress File When Saved(1),
New Column("g", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 1, 2, 2, 2, 2])),
New Column("d", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("r", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 1, 2, 2, 3])),
New Column("Column 3", Numeric, "Continuous", Format("Best", 12), Formula(Col Rank(:d, :g))),
New Column("Column 4", Numeric, "Continuous", Format("Best", 12), Formula(Col Cumulative Sum(1, :g)))
);
dt << New Column("Column 5", Numeric, Continuous, Formula(
Col Cumulative Sum(
If(Row() == Col Min(Row(), :g, :d),
1
,
.
),
:g
)
));

回复:为组中的独特案例添加计数器谢谢亚尔莫!你的方式绝对更干净。我不完全遵循逻辑,但我看到它有效!
注意:我找到了另一种方法,它也使用了 Col Cumulative Sum()。比你的慢。多个子表和一个连接...
Summary1 = Table1 << Summary(Group(:Group, :Date));
Summary2 = Summary1 << Summary(Group(:Group, :Date));
Summary2 << 新列(“数据集”,
数字,
“标称”,
设置选中
);
:Dataset << Formula(Col Cumulative Sum( :N Rows, :Group ) );
//加入表1
表 1 << 加入(
与(数据表(摘要2)),
全选),
选择(
:数据集
),
通过匹配列( :Run = :Run ),
丢弃倍数( 1, 0 ),
包括不匹配项 ( 0, 0 ),
保留主表顺序(1),
输出表名("Table2")
);
回复:为组中的独特案例添加计数器我用这个公式创建了一个新专栏。
如果(排() == 1个,
1个,
如果( :ID ==落后( :ID, 1个),
落后( :姓名( “身份证号码” ) ) + 1个, 1个))
这假定您的“ID”列按顺序排序。
ID的Count,column是用上面的公式新建的列名
回复:为组中的独特案例添加计数器嗯,公式编辑器似乎缺少一个N 口类别功能与GroupBy 选项。
希望正在等待荣誉:
新的 JSL 功能:Col N 类别
回复:为组中的独特案例添加计数器这是一个小脚本,用于生成 A 列中 B 列中找到的唯一值的数量
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
charList = {"A","B","C","D","E","F","G","H","I","J"};
dt << add rows(25);
for each row(
:A = char(random integer(1,5));
:B = charList[random integer(1,10)]
);
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :p</img> ) ) );
N Items( Loc( bygroup[1], :a ) );
)
);回复:为组中的独特案例添加计数器很好的解决方法:)
(p -> b)
但失踪的N 口类别还很痛。 可以添加一个自定义功能N 口类别(: col, <{...}>)
可选列表可用于指定用作 by - 的列/子组,就像前面示例中的 :a 一样。
谁知道如何在汇总函数中引用列?
自定义函数 - 如何引用列
回复:为组中的独特案例添加计数器通常也可以使用不同 Col Something() 函数的一些奇怪组合(由于进行了比较,可能不是最快的,如果我没记错的话,你不应该以这种方式使用 Col 函数,即使它是最好的方法之一使用它们)。
dt << New Column("C", Formula(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
回复:为组中的独特案例添加计数器
可以添加一个自定义功能N 口类别(: col, <{...}>)
不是以干净和漂亮的方式创建具有 byVar 的统计自定义(公式)函数,用于立即计算自定义列公式或缓存行之间的值的选项或函数
回复:为组中的独特案例添加计数器
@jthi写道:
不是以干净和漂亮的方式
哎哟!
我想添加自定义N 口类别函数使其在右键单击“新建公式列”菜单中可用。
所以,如果需要额外的表达式()调用函数时围绕列的表达式,没有机会得到正确的结果吗?
啊……
真正令人惊讶的是,花了这么长时间才添加缺失的内容N 口类别
回复:为组中的独特案例添加计数器惊人的!
根据表的结构,速度会快很多数量级:)
但距离问题的解决还很遥远右键点击新公式栏菜单 :(
Names Default To Here( 1 );
dt = new table("Example",
New Column("A", character),
New Column("B", character)
);
dt << add rows(20000);
for each row(
:A = char(random integer(1,5));
:B = char(random integer(1,1000));
);
t0 = hptime();
dt << New Column( "count",
set each value(
As Constant( Summarize( dt, bygroup = by( :a, :b) ) );
N Items( Loc( bygroup[1], :a ) );
)
);
(hptime() -t0)/1000000; //~ 1min
t0 = hptime();
dt << New Column("C", set each value(
Col Sum(Row() == Col Min(Row(), :A, :B), :A);
));
(hptime() -t0)/1000000; // < 1sec回复:为组中的独特案例添加计数器好消息:JMP19 将提供唯一 N 列() :
https://community.jmp.com/t5/JMP-Wish-List/Col-N-Categories/idc-p/870972/highlight/true#M7292
它将通过新的公式列菜单提供:
