使用自定义参数转置表<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我试图转置一个具有已知标签列名称的表,但转置只在运行时已知的列名称。我已经花了好几个小时来弄清楚如何做到这一点,但是JSL错误地将Transpose命令误认为是矩阵Transpose函数,并且他将Columns()参数用于获取所有列的名称的函数,这个任务非常复杂。桌子。在以下代码中,列表列中填充了我要转置的列的名称。
//创建转置表达式
transposeExpr = Expr(Transpose(Columns(),Label(:Wt或Rd)));
//将Columns参数表达式拉出来(这使我不必自己创建它并将它误认为是Columns()函数)
columnsExpr = Arg(transposeExpr,1);
对于(i = 1,i <= numColumns,i ++,
Insert Into(columnsExpr,Name Expr(As Column)(colNames )));
);
从中删除(transposeExpr,1);
Insert Into(transposeExpr,Name Expr(columnsExpr),1);
cdt =当前数据表();
cdt << Transpose(Name Expr(columnsExpr),Label(:Wt或Rd));
但是,这似乎仍然不起作用,因为columnsExpr仍然计算当前表中所有列的名称列表,而不是具有对表的实际引用的Columns参数。(我认为它解释这些引用是Columns函数的参数)
任何人都可以解释我做错了什么?
Re:使用自定义参数转置表1。转置(列().... 期望用逗号分隔一堆列名,就像你手动填写一样。它不期望列表的名称,也不知道如何从包含感兴趣的列名称的列表的名称中提取信息。评估函数填补了这一空白。这就是我如何看待这个问题,但其他人可能有一种技术上更精确的方式来解释它。
2。Column()与As Column:我不确定它们的区别。文档中的简短示例使它们在功能上看起来可以互换。我感兴趣的是有人可以指出它们之间的差异。
Re:使用自定义参数转置表这似乎有效。我这样做:
colList = List();
对于(i = 1,i <= numColumns,i ++,
Insert Into(colList,Column(colNames。) ));
);
cdt =当前数据表();
cdt << Transpose(Columns(Eval(colList)),Label(:Wt或Rd));
为什么我必须在最终消息中的colList上调用Eval?Column()和As Column()有什么区别?
Re:使用自定义参数转置表不确定我是否完全理解你想要做什么,但是假设健身数据是最新的,这个例子可能会有所帮助。
collist = {:Age,:Oxy,:Runtime};
数据表(“健身”)<< Transpose(
列(eval(collist)),
标签(:名称),
输出表(“健身转置”)
)
Re:使用自定义参数转置表当我遇到这样的麻烦时,我会动态构建一个字符串,并使用eval(parse())执行它。 这有些蛮力,但我被捆绑在一起,所有各种函数如expr,eval,parse,name expr等。
这应该这样做:
transposeStr = “cdt << Transpose(Columns(” ;
对于 ( 一世 = 1 ,一世 <= 为numColumns ,一世 ++,
transposeStr = transposeStr || “:” || colNames [ 一世 ] || “,” ;
) ;
//删除最后一个逗号
CLEN = 长度 ( transposeStr ) ;
transposeStr = SUBSTR ( transposeStr , 1 , ( CLEN - 2 )) ;
//添加label参数
transposeStr = transposeStr || “),标签(:Wt或Rd))” ;
EVAL ( 解析 ( transposeStr )) ;