嗨——兩個有些相關的問題
我已經使用 SPLIT 將長文件轉換為寬文件,但我有一個稍微複雜的情況,我想將寬文件堆棧/轉置為長文件。
我有一個具有唯一主題 ID 的數據集,然後有數百列/變量。 變量名稱完全相同,但第 1 年以“2”結尾,第 2 年以“3”結尾,等等。是否有一種相對簡單的方法可以使該文件變長,例如有一個時間變量(1, 2,3,4) 並且變量名只出現一次,末尾沒有數字?
相關但以不同的方式處理上述內容,在這樣的數據集中,有沒有一種方法可以在 JMP 中創建一個公式來告訴它所有 XXX 百列,從末尾刪除 #(例如,1, 2)列/變量名稱? 顯然我可以手動完成此操作,但這需要很長時間。
非常感謝!
我將指導您使用下面的數據表生成堆疊數據表

去
表=>堆棧
通過將要堆疊的所有列放入“堆疊列”選擇框中來填寫對話框窗口。

它將創建一個如下所示的表

在數據表中創建一個名為“列名稱”的新列

右鍵單擊“列名稱”列的列標題,然後選擇“公式”

需要指定一個公式,該公式獲取“標籤”列中值末尾的數字之前的所有內容,並將其保留為“列名稱”值。因此,這可以通過多種方式完成,具體取決於實際數據。在我們的示例中,公式將找到出現任何數字之前的所有內容,並將其作為“列名稱”值。
該公式查找 :Label 列中的第一個單詞,只要找到任何數值“0123456789”就停止

結果是

現在創建另一個新列並將其命名為“Year”。在本例中,我們希望將列中的最後一個字符作為年份公式的值:

這給了你最終的數據表

關於列的重命名,我不知道以交互方式進行此操作的交互方式。所以我認為你必須運行我之前提供的腳本
我真的很感謝你的回复。如果沒記錯的話,去年你也幫我解答了一個問題。
不幸的是,我不熟悉 JMP 腳本,只能點擊。即使我能弄清楚,因為我有很多變量,我也必須為每個變量運行該代碼,不是嗎?
這是一個腳本,它將生成一個包含 3 列的堆疊數據表

這是一個腳本,它將從數據表中的列末尾去除數字。請記住,重命名列時,如果最終結果的列名與前一列的名稱相同,JMP 將添加一個數值以使新列名成為唯一的名稱
Names Default To Here( 1 );
dt = Current Data Table();
For( i = 1, 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;:, -_)("
)
)
)
);