使用列作为变量大家好 !
这是我的第一篇文章,但不是我希望的最后一篇!
我正在研究品尝结果。 品尝者将样品放在不同的组中,如果字母相同,则样品在同一组中。第一个列是样品的参考,在我有一个品尝者的列之后。 我有一张这样的桌子:
数字 ECH D1 D2 D3
第123章
第234章
第345章
我想有一个品尝者的新表,如果样品在同一组中,则为 0,如果不在同一组中,则为 1。
对于第一个品尝者,新表是:
数字 123 234 345
123 0 0 1
234 0 0 1
345 1 1 0
我为一位品尝者创建这张新表没有任何麻烦,但我想为所有品尝者,所以对于所有列。 最后,我必须对所有表格进行求和,以获得样本之间的距离。
为此,我真的不知道如何使用列作为变量,如果可能的话......
你能帮帮我吗?
我开始在 JMP 中编写脚本!
谢谢您的帮助 !
玛歌
数据表回复:使用列作为变量非常感谢,它完美运行!
事实上,最后一个循环很有用。
我以前从未使用过矢量,这是一个很好的帮助!
回复:使用列作为变量@MargauxR ,
我附上的第一个脚本不符合您的既定目标。如果此表满足您的需要,则附上修改后的脚本。
dt = Data Table("Tasters");
samples = dt:NUM ECH << get values;
nsamp = nitems(samples);
dtnew = New Table("Taster Match", New Column("Taster", Character),
New Column("NUM ECH", character));
for(l=1, l<= nsamp, l++,
dtnew << New Column(samples[l], Numeric)
);
vec = J(nsamp, 1, 1);
//get taster info
currRow = 0;
for(i= 2, i<=ncol(dt), i++,
tester = column(dt,i) << get name;
for(j = 1, j<=nsamp, j++,
idx = dt << get rows where (column(dt,i)[]==column(dt,i)[Row()=j]);
nr = nrow(idx);
tvec = vec;
if(nr > 0,
tvec[idx] = 0;
);
dtnew << add row(1);
currRow++;
dtnew:Taster[currRow] = tester;
dtnew:NUM ECH[currRow] = samples[j];
//write out results
dtnew[currRow,3::nsamp+2] = Transpose(tvec);
); //end for j
); // end for i回复:使用列作为变量大家好
我还是有问题。 我试图更改一些代码,因为我的组将被品尝者命名为不同的名称。
它几乎可以工作,但我有重复的问题。 如果品尝者将多个样本放在同一个组中,因此具有相同的“名称”,脚本将添加几行,与名称重复的次数有关。
在并且,我只想要一个样本。
我找不到谜底在哪里...
我在“tasters”表上执行脚本,结果是“taster match 3”
你能帮帮我吗?
回复:使用列作为变量@gzmorgan0
非常感谢您的回答 !它看起来工作! 我没想过以这种方式工作...
我明天会试一下我的桌子,我会告诉你一切是否都很好。
关于我的桌子,我做得比它更容易。 实际上,每个字母都匹配一组单词来描述该组。 但我可以管理那部分;)
再次感谢你 !
回复:使用列作为变量@MargauxR ,
您的问题很有趣,即使我发现您的结果表很奇怪:它丢失了等级/组值!
品酒师 D1 和 D5 可能对样品进行相同的分组,但 D1 给它们一个 A,D5 给它们一个 C?
那好吧!我扩展了您的示例表。 附此表和脚本。 我认为它可以满足您的需求。
如果您是 JSL 新手,则需要使用 Help>Scripting Index 来查找 JSL 表消息,例如 Get Rows Where() 和 Add Rows、ncol(dt)、Sort 等。

