你好,
我想列出在它们的任何行中包含特定值的所有列并获取这些列的列表。
我首先在列表中列出所有字符列,然后在其中循环以检查每个列中是否包含特定值。 这是我使用的代码。 知道如何帮助我吗? 先感谢您
col = dt << get column names( character );
nc = N Items( col );
colList = {};
For( i = 1, i <= nc, i++,
If(Contains (as column(dt,col[i]) ,"null"),
Insert Into( colList, col[i] ))
);<BR />
下面还有几种方法。 我建议使用 txnelson 的解决方案,因为它更容易理解。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(5),
New Column("Column 1", Character, "Nominal", Set Values({"null", "a", "s", "d", "vb"})),
New Column("Column 2", Character, "Nominal", Set Values({"a", "a", "a", "a", "a"})),
New Column("Column 3", Character, "Nominal", Set Values({"a", "a", "a", "a", "a"})),
New Column("Column 4", Character, "Nominal", Set Values({"null", "a", "a", "a", "a"})),
New Column("Column 5", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5])),
New Column("Column 6", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4, 5])),
New Column("Column 7", Character, "Nominal", Set Values({"a", "a", "a", "null", "a"}))
);
//using Loc and matrix subscripting
char_col_names = dt << Get Column Names(character);
null_cols = {};
For(i = 1, i <= N Items(char_col_names), i++,
If(N Items(Loc(dt[0, char(char_col_names[i])], "null")) > 0,
Insert Into(null_cols, char_col_names[i]);
);
);
Show(null_cols);
//Using list flattening and loc with "2d" matrix
//List flattening function from here https://community.jmp.com/t5/Discussions/JSL-Question-How-to-flatten-quot-a-list-of-lists/td-p/56535
rec = Function({ll},
{i},
If(Is List(ll),
For(i = 1, i <= N Items(ll), i++,
If(!Is List(ll[i]),
Insert Into(llnew, ll[i]), //else
rec(ll[i])
)
)
)
);
flatten = Function({ulist},
{llnew = {}},
rec(ulist);
llnew;
);
col_names = dt << Get Column Names();
//https://community.jmp.com/t5/JSL-Cookbook/Using-Loc-with-a-2D-Matrix/ta-p/195207
null_loc = Loc(flatten(dt[0, col_names ]), "null") - 1;
column_loc = Mod(null_loc, N Items(col_names )) + 1;
Show(col_names[column_loc]);如果您遇到脚本速度方面的“问题”,您可以查看此主题是否有帮助您应该循环遍历数据表还是使用 Recode 或使用 Get
我认为这可能会做你想要的
Names Default To Here( 1 );
dt = current data table();
col = dt << get column names( character );
nc = N Items( col );
colList = {};
For( i = 1, i <= nc, i++,
If( N Rows( dt << get rows where( As Column( dt, col[i] ) == "null" ) ) > 0,
Insert Into( colList, col[i] )
)
);