使用自定義參數轉置表<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 )) ;