<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />ご挨拶、
長年のSASプログラマー、しかしJSLの初心者。 私はデータテーブルを持っていて、例えば20列を含むグループを作成することができました。 来週このレポートを実行すると、同じグループに25列ある可能性があるので、この可変列リストを使用してデータテーブルを転置する方法を探しています。 JSLを使用して、個々の列のリストではなくグループ名を操作するために、以下のスクリプトをどのように変更するのでしょうか。列名は「HB_001など」です。
データテーブル( "tran_HB")<<転置(
列(
:HB_001、
:HB_002、
:HB_003、
:HB_004、
:HB_005、
:HB_006、
:HB_007、
:HB_008、
:HB_010、
:HB_012
)
(:Family、:group)によって、
ラベル(:Label)、
出力テーブル( "sum_HB_w_0")
;
ありがとう、マイク
****編集:
列が物理列グループに属していることに気づきませんでした(私は論理グループを考えていました)。
これはで答えられたようです別の投稿この同じ質問のために(またMikeret57の)。コラムが物理的なグループに属しているなら、あなたは以下の面倒なアプローチをやめることができます(そして、すべての手段によってそうすべきです)。
***編集終了
これを行うための1つの方法があります(他にもたくさんあります)。
基本的にあなたが欲しいカラム(ここでは、HB_で始まる名前のカラム)を含む式を構築し、そして(この目的のために使用したプレースホルダーの代わりに)この式を置き換えます。この場合、私はプレースホルダー(cols)をtransposeステートメントを含む式に呼び出し、この新しく形成された式を評価します。
dt =データテーブル( "tran_HB");
collist =(dt << getcolumnnames);
colexpr = Expr(Columns());
(i = 1、i <= N Items(collist)、i ++、の場合
If(Left(Char(collist) )、3)== "HB_"、
に挿入(colexpr、collist) )
)
;
trans_expr = Expr(
dt <<転置(
cols、
(:Family、:group)によって、
ラベル(:Label)、
出力テーブル( "sum_HB_w_0")
)
;
Eval(Substitution(trans_expr、Expr(cols)、Expr(collist())));
これは文字列操作を使うもう一つの方法です:
dt =データテーブル( "tran_HB");
collist =(dt << getcolumnnames(string));
(i = nitems(collist)の場合、i> = 1、i--、
if(left(collist) 、3)!= "HB _"、removefrom(collist、i))
;
eval(解析(代用(
"\ [
dt <<転置(
列(:xxx)、
(:Family、:group)によって、
ラベル(:Label)、
出力テーブル( "sum_HB_w_0")
)
] \ "、
"xxx"、連結項目(collist、"、:")
)))
乾杯、
ブレイディ