データをロング形式からワイド形式に転置するにはどうすればよいですか?私は新しい JMP ユーザーです。
私のデータは現在長い形式です。 言い換えれば、被験者にはそれぞれ複数行のデータがあります。 ただし、生存分析ではデータをワイド形式にする必要があります (被験者ごとに 1 行のデータ)。 トランスポーズを使用しようとすると、JMP から「トランスポーズできません。 データ列にはさまざまなデータ型があります。」 変数には、連続変数と名目変数が混在しています。 それで、どうすればいいでしょうか? 別のデータセットをワイドからロングに難なく変換できましたが、その逆はできないようです。
現在のデータは次のように設定されています (偽データ):
ID Var1 Var2 結果
001 1 1 0
001 1 1 0
001 1 0 1
002 0 1 0
002 0 1 1
003 1 1 0
私は次のようにしたいです:
ID Var1_time1 Var2_time1 Var1_time2 Var2_time2.... 結果_timex
001 1 1 1 1 1
002 0 1 0 1 1
003 1 1 。 。 0
ありがとう!
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?ありがとう、ジェフ! それはうまくいきました!Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?@ron_horneに適切な解決策がありますが、おそらくいくつかの写真が役立つでしょう。
テーブル -> 分割データを希望どおりに再配置しますが、新しい列を識別する列が必要です。 あなたの場合、ID内の行ごとに列を作成したいので、ID内の行をカウントする列が必要です。@ron_horneこのコラムを呼び出しました索引。
データが次の基準で並べ替えられていることを確認する必要もあります。 IDこれが機能するように。
これは、最初の投稿で JMP データ テーブルの形式で提示したデータです。

このデータに、索引カラム。@ron_horne彼はインデックス列に別の式を使用しましたが、私はもう少し単純なものが好きです。

上の式は次のとおりです。
If( :ID != Lag( :ID, 1 ), 1, Lag( :Index, 1 ) + 1)
これは、現在の行の ID 値が前の行の ID と同じでない場合 (つまり、ラグ ( :ID, 1) ) に 1 を入れます索引列、それ以外の場合は、索引前の行の列 (つまり、ラグ (:インデックス, 1) )
ご覧のとおり、索引データテーブルの列内の行数がカウントされるようになりました。 ID 。

使えるようになりましたテーブル -> 分割あなたを分割する変数1 、 Var2そして結果列別索引行をグループ化しますID 。

これにより、このデータテーブルが得られます。これがあなたが望むものだと思います。 ID 内の各行に新しい列があり、ID ごとに 1 行あります。

Split By 列を作成しない、より単純な例を見た方がわかりやすいかもしれません。 これがそれを示すビデオです。
的を外している場合、またはまだ混乱している場合はお知らせください。
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?最後のチャンス、
1) 最初のコマンドは、オリジナルのデータ ソースを長い形式で作成するだけです。
2) 2 番目のコマンドは、各 ID のイベント番号のインデックスを導入します。イベントの数は各 ID で同じである必要はありません。ただし、一部の ID のイベントが少ない場合は、ワイド テーブル形式で欠損値が発生します。
3) 3 番目のコマンドは、インデックスと ID 列を利用して、要求どおりにテーブルを分割します。イベントと変数ごとに 1 つの列があり、各行は 1 つの ID のみを表します。
データに対しては、最後の 2 つのコマンドを実行するだけです。
names default to here(1);
// source data table
dt = New Table( "Long",
Add Rows( 7 ),
New Column( "ID",
Numeric,
Continuous,
Format( "Best", 5 ),
Set Values( [1, 1, 1, 2, 2, 3, 3] )
),
New Column( "Var1",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 1, 0, 0, 1, 1] )
),
New Column( "Var2",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [1, 1, 0, 1, 1, 1, 0] )
),
New Column( "Outcome",
Numeric,
Continuous,
Format( "Best", 12 ),
Set Values( [0, 0, 1, 1, 1, 0, 0] )
)
);
// add index column for spliting - no need to sort the table first
dt << new column ("index", formula(Sum( :ID[Index( 1, Row() )] == :ID ) ) );
// now split by index and group by ID
dt << Split(
Split By( :index ),
Split( :Var1, :Var2, :Outcome ),
Group( :ID ),
Output Table( "Wide" )
);
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?このコードにより 2 つのテーブルが得られました。 1 つ目は「ソース」と呼ばれるもので、データが 10 行、5 列しかありませんでした。 ID 列は 1 ~ 4 (私の ID ではありません) で、ID は 3 行に表示されます。 これが何をするはずだったのかよくわかりません。 すべてのデータは、日付変数も含めてバイナリです。 2 番目のテーブル「無題」には 4 行のデータと 4 列がありました。 ID は 1 から 4 まで行を下っていき、列はすべて欠落しているとラベル付けされます。
これは私が望んでいることではないと思います。
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?スクリプト全体をそのまま実行し、結果が探しているものであれば、数回クリックするだけでデータ セット上で再現できます。
1) 新しい列を追加し、「インデックス」という名前を付けます。
2) その式を次のように設定します: Sum( :ID[Index( 1, Row() )] == :ID )
3) テーブル >> 同様に分割して塗りつぶします。

「OK」をクリックすれば完了です。
最高、
ロン
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?OK、私は JMP は初めてで、JSL も使ったことはありませんが、SPSS、SAS、その他いくつかでプログラミングはたくさん行ってきました。 この例では、スクリプト、特に「値の設定」にまったく従っていません。 コマンドの次のブロックは、分割する前にグループ化するための新しいインデックス変数を作成しようとしていると思います。
別のデータセットでワイドからロングに移行するときにいくつかの変数を作成しましたが、その場合、すべての被験者の観測値は同じでした。
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?最初に二重確認を怠って申し訳ありません。
次のことを試してください
デフォルトの名前はここにあります( 1 ) ;
// ソースデータテーブル
dt = 新しいテーブル( "ソース"、
行の追加( 10 ) 、
新しい列( 「ID」、
数値、
継続的、
フォーマット( "最高"、 5 ) 、
設定値( [ 1 、 1 、 1 、 2 、 2 、 3 、 3 、 4 、 4 、 4 】 )
) 、
新しい列( "Var1"、
数値、
継続的、
フォーマット( "最高"、 12 ) 、
設定値( [ 1 、 1 、 1 、 0 、 0 、 1 、 1 、 0 、 1 、 0 】 )
) 、
新しい列( "Var2"、
数値、
継続的、
フォーマット( "最高"、 12 ) 、
設定値( [ 1 、 1 、 0 、 1 、 1 、 1 、 0 、 1 、 1 、 0 ] )
) 、
新しい列( "結果"、
数値、
継続的、
フォーマット( "最高"、 12 ) 、
設定値( [ 0 、 0 、 1 、 1 、 1 、 0 、 0 、 1 、 1 、 1 】 )
)
) ;
// 分割用のインデックス列を追加 - 最初にテーブルをソートする必要はありません
dt <<新しい列( "インデックス"、式(和( :ID [索引( 1 、 行() )] == :ID ) ) ) ;
// インデックスごとに分割され、ID ごとにグループ化されるようになりました
dt <<スプリット(
分割方法( :索引) 、
スプリット( :Var1、:Var2、:結果) 、
グループ( :ID )
) ;
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?そのとき何が起こっているのかわかりません。 データはID順に並べ替えられます。 ID で分割し、変数を「分割列」として使用すると、最終的に 14 行のデータと、ID/変数の組み合わせごとに 1 つの列が作成されます。
私は取得しようとしています:
ID 訪問 1 訪問 2 .... 訪問 13 結果 1 結果 2 ... 結果 13
001 9/13 10/20 ... 3/2 0 0 ... 1
002 7/04 8/12 ... 12/5 0 1 ... 1
私が得ているのは
日付1-ID001 日付1-ID002
Line1 9/13 7/04
ライン2 10/20 8/12
ありがとう、
ジョー
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?
おっと....グループを使用してID列もそこに配置すると問題を解決できると思います
データが ID で並べ替えられている場合 (特定の ID のすべてのデータが一緒になります)。 並べ替えられていない場合は、[テーブル]==>[並べ替え] に移動し、データを ID で並べ替えます。 次に、それを「分割」列として選択し、Var1、Var2、結果を「分割列」として選択すると、分割列の値ごとに 1 行のデータ テーブルが得られ、Var1 001、Var1 002 が得られます。 ......Var1 013、Var2 001、Var2 002....Var2 013、結果 001、結果 002....結果 013。
最大 13 レベルまで設定できるという事実を考慮すると、
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?ありがとう、ロン、でも私は単純な要約をするつもりはありません。 生存分析に取り組んでいます。 最初のステップは、データをワイド形式に変換することです。
ジョーRe: データをロング形式からワイド形式に転置するにはどうすればよいですか?ありがとう、ジム。 それは部分的にはうまくいきました。 ただし、各 sbject ID (n=15,000) ごとに 1 行を取得するのではなく、最終的に 14 行のデータが得られ、各変数名には SubjectID が追加されました。
私のデータは SubjectID で整理されています。 その中で、被験者は各訪問について複数行のデータ (治療コード) を持つことができます。 長い形式では、件名ごとに 1 ~ 13 行のデータがあります。
複数の「分割」変数を使用する必要がありますか? 「グループ化」を使用する必要がありますか?
ありがとう、
ジョー
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?ジムは正しいです。 ただし、ID ごとのデータの概要を作成するためだけにこれを実行している場合は、テーブル >>> 概要を使用してこの手順を保存できます。
最高、
ロン
Re: データをロング形式からワイド形式に転置するにはどうすればよいですか?あなたがしたいのは、使用することです
テーブル==>分割
ID で分割し、分割列として var1、var2、結果を指定できます。Re: データを Long 形式から Wide 形式に転置するにはどうすればいいですか?これは古いスレッドだとはわかっていますが、質問があります。これは私の場合はうまくいきましたが、インデックス列を作成しようとすると、最初の ID が空白になります。次のようになります。
何が原因なのか知っている人はいますか?

Re: データを Long 形式から Wide 形式に転置するにはどうすればいいですか?欲しいものを手に入れるための一つのアプローチはこれです
If( Row() == 1,
theVal = 1,
If( Lag( :yourColumn ) != :yourColumn,
theVal
++)
);
theVal;
Re: データを Long 形式から Wide 形式に転置するにはどうすればいいですか?やあ、
この数式をどこに入力すればよいのでしょうか? 同じインデックス列内でしょうか? 「yourColumn」を何かに変更する必要がありますか?
Re: データを Long 形式から Wide 形式に転置するにはどうすればいいですか?指定した数式はインデックス列に配置されます。
「yourColumn」は、列が変更されたときにインデックス列の値を増分したい列の名前に変更する必要があります。