如何將資料從長格式轉換為寬格式?我是 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
謝謝!
回覆:如何將資料從長格式轉換為寬格式?謝謝,傑夫! 成功了!回覆:如何將資料從長格式轉換為寬格式?@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 ,變數2和結果列按指數並將行分組為ID 。

這會給你這個數據表,我認為這就是你想要的。 它為 ID 中的每一行新增列,並且每個 ID 一行。

看一個更簡單的範例可能會更容易,其中我們沒有建立「拆分依據」列。 這是一個視頻展示了這一點。
如果我沒有抓到重點或你仍然感到困惑,請告訴我。
回覆:如何將資料從長格式轉換為寬格式?最後的機會,
1)第一個命令只是以長格式建立原始資料來源。
2) 第二條指令為每個 ID 的事件編號引入索引。每個 ID 的事件數量不需要相等。但是,如果某些 ID 的事件較少,它們將在寬表格式中缺少值。
3) 第三個指令利用索引和 ID 欄位來依照您要求的方式拆分錶。每個事件和變數佔一列,每一行僅代表一個 ID。
對於您的數據,您只需要執行最後兩個命令。
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" )
);
回覆:如何將資料從長格式轉換為寬格式?這段程式碼給了我兩張表。 第一個稱為“來源”,只有 10 行資料和 5 列。 ID 欄位從 1 到 4(不是我的 ID),ID 出現在 3 行。 我真的不知道這該做什麼。 所有資料都是二進位的,甚至是我的日期變數。 第二個表「無標題」有 4 行資料和 4 列。 ID 從 1-4 往下,行和列都標記為缺失。
我不認為這正在做我想做的事。
回覆:如何將資料從長格式轉換為寬格式?如果您按原樣運行整個腳本並且結果就是您正在尋找的結果,那麼您只需單擊幾下即可在資料集上重現它。
1)新增一個新列並將其命名為“index”。
2) 將其公式設為: Sum( :ID[Index( 1, Row() )] == :ID )
3)表格>>拆分並按原樣填充。

按一下“確定”即可完成。
最好的,
榮恩
回覆:如何將資料從長格式轉換為寬格式?好的,我是 JMP 新手,從未使用過 JSL,儘管我已經在 SPSS、SAS 和其他一些軟體中完成了大量程式設計。 在這個例子中,我根本沒有遵循腳本,尤其是「設定值」。 我認為下一個命令區塊是嘗試建立新的索引變量,以便在拆分之前進行分組。
在另一個資料集中從寬到長時,我創建了一些變量,但在這種情況下,每個主題都有相同數量的觀察結果。
回覆:如何將資料從長格式轉換為寬格式?抱歉沒有先仔細檢查。
嘗試以下操作
名稱預設為此處( 1 ) ;
// 來源資料表
dt = 新表( “來源”,
新增行( 10 ) ,
新專欄( “ID ”,
數字,
連續的,
格式( “最好的”, 5 ) ,
設定值( [ 1 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 4 ] )
) ,
新專欄( “變數1”,
數字,
連續的,
格式( “最好的”, 12 ) ,
設定值( [ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 0 ] )
) ,
新專欄( “變數2”,
數字,
連續的,
格式( “最好的”, 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 )
) ;
回覆:如何將資料從長格式轉換為寬格式?我不確定接下來會發生什麼事。 資料按 ID 排序。 當我按 ID 拆分並使用變數作為「拆分列」時,我最終得到 14 行資料和每個 id/變數組合的一列。
我試著得到:
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
第1號線 9/13 7/04
第2號線 10/20 8/12
謝謝,
喬
回覆:如何將資料從長格式轉換為寬格式?
哎呀.....我想如果你使用群組並將你的 ID 列也放在那裡,你就可以解決這個問題
如果您的資料按 ID 排序(給定 ID 的所有資料都在一起)。 如果沒有排序,則進入Tables==>Sort,依照ID對資料進行排序。 然後選擇它作為“分割依據”列,選擇 Var1、Var2、結果作為“分割列”,您將得到一個資料表,其中分割依據列的每個值一行,然後您將得到 Var1 001、Var1 002 .. ....Var1 013,Var2 001,Var2 002......Var2 013,結果001,結果002......結果013。
鑑於您最多可以有 13 個等級。
回覆:如何將資料從長格式轉換為寬格式?謝謝,羅恩,但我不會做簡單的總結。 我正在做生存分析。 我的第一步是將資料轉換為寬格式。
喬回覆:如何將資料從長格式轉換為寬格式?謝謝,吉姆。 這部分奏效了。 然而,我最終得到的是 14 行數據,並且每個變數名稱都附加了主題 ID,而不是為每個物件 ID (n=15,000) 取得一行。
我的資料是按SubjectID組織的。 其中,受試者每次訪問都可以有多行數據(治療代碼)。 在長格式中,每個主題有 1-13 行資料。
是否應該使用多個“分割”變數? 應該使用「分組依據」嗎?
謝謝,
喬
回覆:如何將資料從長格式轉換為寬格式?吉姆是對的。 然而,如果您這樣做只是為了產生每個 ID 的資料摘要,則可以使用表格 >>> 摘要來保存此步驟。
最好的,
榮恩
回覆:如何將資料從長格式轉換為寬格式?你想做的是使用
表格==>拆分
您可以按 ID 拆分並指定 var1、var2 和結果作為拆分列回覆:如何將資料從長格式轉置為寬格式?我知道這是一個老話題,但我有一個問題。這對我有用,除了當我嘗試建立索引列時,第一個 ID 是空白的。它看起來是這樣的。
有誰知道這可能是什麼原因造成的?

回覆:如何將資料從長格式轉置為寬格式?這是一種獲得你想要的東西的方法
If( Row() == 1,
theVal = 1,
If( Lag( :yourColumn ) != :yourColumn,
theVal
++)
);
theVal;
回覆:如何將資料從長格式轉置為寬格式?你好呀,
我該把這個公式放在哪裡?在同一個索引列中?我需要將“yourColumn”更改為其他內容嗎?
回覆:如何將資料從長格式轉置為寬格式?我指定的公式將被放置在索引列中。
需要將“yourColumn”變更為列的名稱,以便在列變更時增加 Index 列的值。