如何將列表中的變量分配給數據表中的一行?我正在使用具有可變行數的數據表。 我想將一個分類描述分配給一個名為“原因 1”的新列。 當“名稱”列與我定義的任何列表中的任何字符串匹配時,將分配此“原因 1”列。
'Name' 行條目將與 ::slitter、::label 或 ::case 列表中的條目完全匹配。
我想為所有行分配不同的原因 1 代碼,然後根據每個原因 1 分析數據。
dt1 << New Column("Reason 1", Character, "Nominal");
Nrows = N Rows(dt1);
For( i =1, i<=Nrows, i++
For( j=1, j<= N items( ::slitter ), j++,
If(:Name(i) == Eval(slitter(j)), :Reason 1(i) = "Slitter");
);
);
// %Slitter% description codes
slitter = {"TM2300-370",
"TM2300-380",
"TM2300-385",
"TM2300-390",
"TM2300-395",
"TM2300-400"};<BR /><BR />// %Label% description codes (8)<BR />::label = {"TM2300-020",<BR />"TM2300-025",<BR />"TM2300-070",<BR />"TM2300-075",<BR />"TM2300-080",<BR />"TM2300-085",<BR />"TM2300-090",<BR />"TM2300-095"};<BR /><BR />//%Case% description codes (7)<BR />::case = {"TM2300-030",<BR />"TM2300-035",<BR />"TM2300-040",<BR />"TM2300-045",<BR />"TM2300-050",<BR />"TM2300-055",<BR />"TM2300-060"};數據表腳本視窗回复:如何將列表中的變量分配給數據表中的行?您有幾個語法錯誤,以及一個低效的 For 循環來檢查可以使用 Contains() 函數替換的匹配項。我還添加了一種方法來創建新的公式列來執行相同的計算。
Names Default To Here( 1 );
dt1=current data table();
dt1 << New Column( "Reason 1", Character, "Nominal" );
// %Slitter% description codes
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"};
Nrows = N Rows( dt1 );
For( i = 1, i <= Nrows, i++,
If( Contains( slitter, :Name[i] ) == 1,
:Reason 1[i] = "Slitter"
)
);
// or
dt1 << New Column( "Reason 2",
character,
formula(
If( Row() == 1,
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"}
);
If( Contains( slitter, :Name ) == 1,
:Reason 2 = "Slitter"
);
)
);回复:如何將列表中的變量分配給數據表中的行?還有另一種使用 get rows where 和 contains 的方法。不需要循環。
dt = data table("Sample Data Set-1");
// %Slitter% description codes
slitter = {"TM2300-370", "TM2300-380", "TM2300-385", "TM2300-390", "TM2300-395", "TM2300-400"};
match_rows = dt << get rows where(contains(slitter, :Name));
dt:Reason 1[match_rows] = "Slitter";回复:如何將列表中的變量分配給數據表中的行?我的思緒最初進入一個循環來完成我想做的事情,但感謝您提供這個替代解決方案!
這完全按照我想要的方式對我的數據進行了分類。