我试图转置所有以S开头的列(并且只有这些列以我的数据集中的S开头 - 附加的样本dt)。 有时S列比其他列多,所以我需要构建一个以S开头的列列表,这样我就可以将该列表传递给转置代码。 当然还有其他标题的列。
我看到至少2个其他问题相同的帖子( 链接1 和 LINK2 )但是我在复制结果时遇到了麻烦,我想知道是不是因为JMP14表现不一样,或者我只是做错了?
我的代码在下面,但是当我运行它时,这是我的错误。 我的样本dt已附上。
子串:在访问或评估'AllCols [i]',AllCols [/ * ### * / i]时不是字符串或数字
在以下脚本中,错误标记为/ * ### * /
对于(i = 1,i <= N项(AllCols),i ++,
如果(
Substr(AllCols [/ * ### * / i],1,1)==“S”&
缺失(Num(Substr(AllCols [i],2)))== 0,
Insert Into(ColList,Num(Substr(AllCols [i],2)))
)
)
dt= current data table();
AllCols = dt << get column names;
ColList = {};
For( i = 1, i <= N Items( AllCols ), i++,
If( Substr( AllCols[i], 1, 1 ) == "S" & Is Missing( Num( Substr( AllCols[i], 2 ) ) ) == 0,
Insert Into( ColList, Num( Substr( AllCols[i], 2 ) ) )
);
);
// Create Column Lists
For(i=1,i<=nItems(ColList),i++,
ColList[i]=column("S" || char(ColList[i]));
);
Jim,所以看起来我缺少的一个关键是将列名定义为字符串。 谢谢!
你做的工作比你需要的多得多。 这是对代码的修改
dt = Current Data Table();
AllCols = dt << get column names( string );
ColList = {};
For( i = 1, i <= N Items( AllCols ), i++,
If( Substr( AllCols[i], 1, 1 ) == "S" & Is Missing( Num( Substr( AllCols[i], 2 ) ) ) == 0,
Insert Into( ColList, AllCols[i])
)
);
dt2 = dt << Transpose(
columns( eval( ColList )));