需要根据另一列中出现的变量序列创建一列大家好,
我想创建一个基于:客户端_ID以及多少次(多个序列仅计为 1 次,请参阅:评论列)它出现在数据集中。 我的要求是:最终要求并很高兴拥有:必填栏 1以及。 我无法重新排列/排序数据。
有什么帮助吗?
非常感谢,-HSS

数据混合和清理质量和工艺工程回复:需要根据另一列中出现的变量序列创建一列使用 SQL 查询(特别是组连接)或 JMP 的不同表操作(拆分、转置、文本到列并合并列、连接回来)可能比公式更容易(并且更快),但您可以使用公式来完成,例如使用洛克()以及不同列的索引。
编辑:添加交互方法
第一个分割数据:

接下来转置分割数据:

从转置数据中,首先使用文本到列将 Req2 和 Region 彼此分开

然后使用组合列来组合行列

重命名并删除不必要的列,您最终应该得到这样的结果

将其与原始数据连接起来2


删除多余的列,您应该得到您需要的内容。
增强日志可能已为您准备好脚本,但您可能需要稍微清理一下

回复:需要根据另一列中出现的变量序列创建一列大家好,
还有一个进一步的要求 - 添加一列:Req_3 ,所有文本来自:团体将被合并并存储。 :团体文本可以长达 2 行。 分隔符可以是任何东西。
问题是 - 需要合并的单元格数量不固定,这取决于列中的值:要求_1。
“Req_3”是必需的。
任何帮助,谢谢。

回复:需要根据另一列中出现的变量序列创建一列@jthi感谢您的帮助。
我会沿着这个方向努力。
回复:需要根据另一列中出现的变量序列创建一列最简单的事情是最有可能创建新列,然后使用它作为分组而不是:Client_ID(原始公式)

Col Cumulative Sum(:"Concatenate[Region,Client_ID]"n != Lag(:"Concatenate[Region,Client_ID]"n), :"Concatenate[Region,Client_ID]"n)
否则,以累积和求和的部分会很快变得更加复杂(可能有比这更简单的部分,但这应该处理:区域更改上的错误值):
Col Cumulative Sum(
If(Row() == Col Minimum(Row(), :Client_ID, :Region),
1
,
:Client_ID != Lag(:Client_ID)
)
, :Client_ID, :Region
)
回复:需要根据另一列中出现的变量序列创建一列@jthi Col Cumulative Sum 可以工作,但我无法使用分组变量:Region 找到循环/起点的正确初始化。
还有其他建议吗?
谢谢
列累计和( :Client_ID != Lag( :Client_ID ) & :Region == Lag( :Region ), :Client_ID )
回复:需要根据另一列中出现的变量序列创建一列如果您想像这样使用关联数组,则必须首先创建新的“分组”列。 对于多个分组列,使用 Col Cumulative Sum 可能会更容易(可能总是更容易,只是想出了这个)。 你必须找出正确的比较和分组
Col Cumulative Sum(:Client_ID != Lag(:Client_ID), :Client_ID)
回复:需要根据另一列中出现的变量序列创建一列你好@jthi ,我可以使用其他列对“关联数组”进行分组吗? 像这样的东西? “关联数组(:Client_ID,:区域)”我的数据集有超过 700000 行,关联命令是否仍然有效! 如果我可以分组:地区,它可能仍然有超过 10000 行。 无论如何,我一定会尝试这个。
感谢您的帮助。 问候,-HSS
回复:需要根据另一列中出现的变量序列创建一列使用关联数组来存储值,然后根据需要增加应该可以在这里工作。
必填列 1 的公式:
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
最终要求:
Eval Insert("^:Client_ID^_^:Required Column 2^");
示例脚本(使用不同的列名称):
Names Default To Here(1);
dt = Open("$DOWNLOADS/data.jmp");
dt << New Column("Required Column 2", Numeric, Ordinal, Formula(
As Constant(
aa = Associative Array(:Client_ID);
aa = Associative Array(aa << get keys, Repeat(0, N Items(aa)));
retval = 1;
);
If(:Client_ID != Lag(:Client_ID),
aa[:Client_ID]++;
);
aa[:Client_ID];
));
dt << New Column("Final Requirement 2", Character, Ordinal, Formula(
Eval Insert("^:Client_ID^_^:Required Column 2^");
));
