基於可能包含不存在列的清單建立列子集用戶您好,
我閱讀了之前與該主題相關的討論,但沒有找到所有答案。
我想知道如何根據給定的列列表建立列子集。 我知道當給定清單中的列存在於您想要子集的資料表中時,您可以輕鬆地執行此操作。
我想知道的是如何使腳本變得健壯,以便在列表中給定列不存在的情況下,不會給出“在‘錯誤參數’的訪問或評估中找不到列”的錯誤。
例如,在下面的腳本中,我仍然希望能夠使用列、名稱、年齡和身高來創建“Big Class.jmp”的子集,因為它們存在,但我的腳本會崩潰,因為我有一個非-給定清單中存在的欄位稱為「無」。
我嘗試將 Try() 放在程式碼中,但沒有成功。
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
big_class_cols = dt << Get Column Names();
show(big_class_cols);
subDt1 = dt << Subset(
Columns( cols_of_interest ),
Output Table Name( "Big Class 2" )
);
」
謝謝,
西蒙
資料存取資料混合與清理回覆:根據可能包含不存在列的清單建立列子集非常優雅的解決方案。 效果很好。
謝謝吉姆!回覆:根據可能包含不存在列的清單建立列子集這是使用 <
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cols_of_interest = {name, age, height, none}; //names without scoping colon
AA1 = Associative Array( dt << Get Column Names() );
AA2 = Associative Array( cols_of_interest );
cols = AA2 << intersect( AA1 ) << get keys;
subDt1 = dt << Subset( Columns( cols ), Output Table Name( "Big Class 2" ) );
回覆:根據可能包含不存在列的清單建立列子集這是處理這個問題的簡單方法。它只是檢查資料表中是否存在 cols_of_interest 清單中的每一列,如果不存在,則將其從 cols_of_interest 清單中刪除。
names default to here(1);
cols_of_interest = {:name, :age, :height, :none};
show(cols_of_interest);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
For(i=nitems(cols_of_interest), i>=1, i--,
if(try(column(dt,char(cols_of_interest[i]))<<GET name=""></GET>