使用列作為變量大家好 !
這是我的第一篇文章,但不是我希望的最後一篇!
我正在研究品嚐結果。 品嚐者將樣品放在不同的組中,如果字母相同,則樣品在同一組中。第一個列是樣品的參考,在我有一個品嚐者的列之後。 我有一張這樣的桌子:
數字 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 等。

