すべてSで始まる特定の列を転置しようとしています(添付されているデータセット - Sample dtでは、これらの列だけがSで始まります)。 他の列よりもS列が多い場合があるので、Sで始まる列のリストを作成して、そのリストを転置コードに渡すことができるようにする必要があります。 もちろん他のヘッダを持つ列があります。
私は同じことを求めている少なくとも2つの他の解決された投稿を見ます( link1 そして link2 )しかし、私は結果を再現するのに問題があります、そしてそれがJMP14が同じように振る舞わないことによるのであろうか、あるいは多分私はそれを間違ってやっているのでしょうか?
私のコードは以下の通りですが、実行したときのエラーです。 私のサンプルのdtが添付されています。
部分文字列: 'AllCols [i]'、AllCols [/ * ### * / i]のアクセスまたは評価において、文字列または数値ではない
次のスクリプトでは、/ * ### * /でマークされたエラー
(i = 1、i <= N Items(AllCols)、i ++、の場合
もし(
Substr(AllCols [/ * ### * / i]、1、1)== "S"&
(Num(Substr(AllCols [i]、2)))== 0がありません、
に挿入(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、私が見逃していた重要なことの1つは、列名をストリングとして定義することでした。 ありがとうございました!
あなたは必要以上に多くの仕事をしていました。 これがあなたのコードの書き直しです。
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 )));