根據列表創建列子集,其中可能包含不存在的列嗨,用戶們,
我通讀了與該主題相關的先前討論,但沒有找到所有答案。
我想知道如何基於給定的列列表創建列子集。 我知道當給定列表中的列存在於您要子集化的數據表中時,您可以輕鬆地做到這一點。
我想知道的是,如何使腳本更健壯,以便在列表中的給定列不存在的情況下,不會出現“在訪問或評估“錯誤參數”時找不到列”的錯誤。
例如,在下面的腳本中,我仍然希望能夠創建帶有列,名稱,年齡和高度的“ Big Class.jmp”子集,因為它們存在,但是由於我的腳本不給定列表中存在的列稱為“ none”。
我嘗試將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" )
);
”
謝謝,
西蒙
數據表腳本編寫回复:根據可能包含不存在的列的列表創建列子集這是處理此問題的簡單方法。它只是簡單地檢查一下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>回复:根據可能包含不存在的列的列表創建列子集這是一種使用 <
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" ) );