こんにちは-2つのやや関連する質問
SPLITを使用して長いファイルを幅の広いファイルに変換しましたが、幅の広いファイルを長いファイルにスタック/転置したいという少し複雑な状況があります。
一意のサブジェクトIDと、数百の列/変数を持つデータセットがあります。 変数名は、1年目が「2」で終わる、2年目が「3」で終わるなどを除いてまったく同じです。時間変数(1、 2,3,4)そして変数名は一度だけそこにあり、最後に数字はありませんか?
関連しているが、別の方法で上記にアプローチしているこのようなデータセットでは、JMPで数式を作成して、XXX百列すべてにそれを伝え、#(たとえば、1、2)を末尾から削除する方法があります。列/変数名? 明らかに私はそれを手動で行うことができましたが、それは永遠にかかります。
本当にありがとう!
これは、3列のスタックデータテーブルを生成するスクリプトです。

これは、データテーブルの列の終わりから数値を取り除くスクリプトです。列の名前を変更するときに、最終結果が前の列の名前と同じ列名である場合、JMPは数値を追加して、新しい列名を一意の名前にすることを忘れないでください。
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 2, i <= N Cols( dt ), i++,
if(
is missing(
Num(
word(
-1,
Lowercase( Column( dt, i ) << get name )
,
"abcdefghijklmnopqrstuvwxyz;:, -_)(")
)
) == 0,
Column( dt, i ) <<
set name(
substr(
Column(dt,i)<<GET name=""></GET>
Names Default To Here( 1 );
dt = new table( "Example",
add rows( 10 ),
New Column( "Year2", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year3", formula( Random Integer( 1, 100 ) ) ),
New Column( "Year4", formula( Random Integer( 1, 100 ) ) )
);
dtStack = Data Table( "Example" ) << Stack(
columns( :Year2, :Year3, :Year4 ),
Source Label Column( Column ),
Stacked Data Column( "Data" )
);
dtStack << New Column( "Year",
formula(
Num(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);
dtStack:Year << delete formula;
for each row(
:Column = substr(
:Column,
1,
Length( :Column ) - Length(
Word(
-1,
Lowercase( :Column ),
"abcdefghijklmnopqrstuvwxyz;:, -_)("
)
)
)
);お返事ありがとうございます。記憶が役立つなら、去年の質問で私を助けてくれました。
残念ながら、私はJMPスクリプトに精通しておらず、ポイントアンドクリックするだけです。そして、それを理解できたとしても、変数がたくさんあるので、それぞれに対してそのコードを実行する必要がありますね。