重新排序列問題我知道 JMP 按名稱降序對列進行排序。 我必須按照測試規範中的顯示方式命名我的列,以便更輕鬆地識別我們所指的測試。 我有 16 個通道 [0 - 15] 和 2 個測試標識符 [ T & R ]。 我在多列中連接不同的數據字段。 下面是一個例子。這種順序使得在幻燈片中繪製和放置變得很麻煩,因為我們必須移動所有幻燈片。 從示例中您可以看到,它是 0, 1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9。 有關如何糾正此問題的任何簡單建議。 我知道我可以將其設為 00、01、02...使其正確排序,但正如我提到的,我們的規範省略了前導零。
CH0 R 狀態 3 @ 頻率
CH0 R 狀態 4 Delta Amp @ Freq
CH0 T 狀態 1 @ 頻率
CH1 R 狀態 3 @ 頻率
CH1 R 狀態 4 Delta 放大器@頻率
CH1 T 狀態 1 @ 頻率
CH10 R 狀態 3 @ 頻率
CH10 R 狀態 4 Delta 放大器@頻率
CH10 T 狀態 1 @ 頻率
CH11 R 狀態 3 @ 頻率
CH11 R 狀態 4 Delta 放大器@頻率
CH11 T 狀態 1 @ 頻率
回复:重新排序列問題請標記我作為解決方案發送的最後一條回复。它確實可以幫助其他人將來找到正確的解決方案。
回复:重新排序列問題嗯,多麼偶然啊。 我們的 IT 部門正在為我們公司分發 JMP 15。
再次感謝你。回复:重新排序列問題我使用 JMP 15 編寫了腳本,它正確評估了
Column( i ) << 獲取名稱。
然而,在您的回復之後,我回去發現 JMP 14 及更早版本需要 Eval() 來強制 JMP 獲取 << get name 的結果
Eval( 列( i ) << 獲取名稱 )
以下代碼適用於 JMP 15 及之前的版本
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 12 ),
New Column( "Column 1", Character, "Nominal" ),
New Column( "CH0 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH0 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH0 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) )
);
Wait( 5 ); // Wait 5 seconds so one can see the original example table
// If a column name starts with "CH" adjust the name
For( i = 2, i <= N Cols( dt ), i++,
If( Substr( Column( i ) << get name, 1, 2 ) == "CH",
Column( i ) << set property( "Original Name", Eval( Column( i ) << get name ) );
tempName = Substr( Column( i ) << get name, 3 );
number = Word( 1, tempName, " " );
tempName = Substr( tempName, Length( number ) + 2 );
number = Substr( "00", Length( number ) ) || number;
tempName = "CH" || number || " " || tempName;
Column( i ) << set name( tempName );
)
);
// Reorder the table names
dt << reorder by name;
// Replace the column names with the original names
For( i = 1, i <= N Cols( dt ), i++,
If( Is Empty( Column( i ) << get property( "Original Name" ) ) == 0,
Column( i ) << set name( Column( i ) << get property( "Original Name" ) );
Column( i ) << delete property( "Original Name" );
)
);
回复:重新排序列問題謝謝吉姆的幫助... 當您添加前導“0”強制 01 - 10 正確排序時,我明白您在做什麼。 腳本中應該將名稱更改回原始名稱的部分似乎正在運行,但列沒有更改。 我進入列信息,列屬性顯示為“column( i ) << Get Name”,這應該是那個名稱還是實際名稱? 它刪除了列屬性但無法重命名該列回复:重新排序列問題下面是一個示例腳本,對於您的示例數據,將數字轉換為 3 位數字,按名稱對列重新排序,然後將列名稱重置回原始名稱
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 12 ),
New Column( "Column 1", Character, "Nominal" ),
New Column( "CH0 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH0 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH0 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH1 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH10 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 R State 3 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 R State 4 Delta Amp @ Freq", Numeric, "Continuous", Format( "Best", 10 ) ),
New Column( "CH11 T State 1 @ Freq", Numeric, "Continuous", Format( "Best", 10 ) )
);
wait(5); // Wait 5 seconds so one can see the original example table
// If a column name starts with "CH" adjust the name
For( i = 1, i <= N Cols( dt ), i++,
If( Substr( Column( i ) << get name, 1, 2 ) == "CH",
Column( i ) << set property( "Original Name", Column( i ) << get name );
tempName = Substr( Column( i ) << get name, 3 );
number = Word( 1, tempName, " " );
tempName = Substr( tempName, Length( number ) + 2 );
number = Substr( "00", Length( number ) ) || number;
tempName = "CH" || number || " " || tempName;
Column( i ) << set name( tempName );
)
);
// Reorder the table names
dt << reorder by name;
// Replace the column names with the original names
For( i = 1, i <= N Cols( dt ), i++,
If( Is Empty( Column( i ) << get property( "Original Name" ) ) == 0,
Column( i ) << set name( Column( i ) << get property( "Original Name" ) );
Column( i ) << delete property( "Original Name" );
)
);
回复:重新排序列問題我正在嘗試處理您所描述的內容,但我無法弄清楚。 您能舉個例子嗎?
謝謝回复:重新排序列問題你讓我很困惑。 如果我理解正確,您想按字母順序對列重新排序,但列名稱中有非零填充的數字。 所以我認為你的問題是,如何正確地重新排序列,就好像數字被零填充一樣。 這與數據表中有多少行無關。 所以我上面的建議應該仍然成立。 讀入數據表後,您可以創建一個小腳本,將原始名稱保存到新的列屬性中,將列名稱更改為零填充名稱,對列重新排序,然後再次循環遍歷列,更改名稱回到原來的列名。
這將運行得非常快,因為它不會更改任何數據,只會更改列名稱。
我缺少什麼?回复:重新排序列問題謝謝吉姆..
我忘了提及我在 SQL 腳本中創建了此列。 考慮到我帶來了大約 200 萬行數據,我嘗試在表實際到達 JMP 之前盡可能多地執行操作以節省時間。 所以列將是原始列。回复:重新排序列問題我已經處理了這個問題,通過一個腳本將名稱更改為我需要的形式,然後我可以使用“按名稱重新排序”。我首先在腳本中創建一個名為“原始名稱”的列屬性,以便我隨時可以將名稱改回來。一旦腳本對名稱進行了更改,它就可以發出
dt << 按名稱重新排序
之後,您可以重新循環列名稱並從“原始名稱”列屬性中獲取值,並將列名稱設置回原始名稱。