關聯數組重命名數據表列嗨,JMP社區,
我有一個包含許多列的數據表(dt1),想重命名它們。 它們用奇怪的名字編碼。 但是,我還有另一個只有兩列:Name和:Code的數據表(dt2)。 dt2中的每一行都有與代碼關聯的有意義的名稱。
我知道如何使用for循環來做到這一點,但是我正在嘗試學習新的東西,並希望通過關聯數組來做到這一點。 類似於該線程中的內容這裡。 我以為我可以做這樣的事情:
Names Default To Here( 1 );
dt = Data Table( "dt1" );
dtnames = Data Table( "dt2" );
aa_name_code = Associative Array(
Column( dtnames, "Name" ) << Get Values,
Column( dtnames, "Code" ) << Get Values
);
aavalues = aa_name_code << Get Values;
aakeys = aa_name_code << Get Keys;
Eval( Eval Expr( Column(dt,Expr( aavalues )))) << Set Name( Expr( aakeys ) ) ) );
但是,不幸的是,這不起作用。 這不是我的表現思想關聯數組的行為。
同樣,我想嘗試學習一些新東西,並通過新的JSL命令獲得更好的結果,這就是為什麼我要遍歷關聯數組的原因。 如果不可能的話,我將以暴力方式進行。
感謝您對此的任何想法和反饋!,
DS
數據表腳本編寫回复:關聯數組重命名數據表列使用關聯數組和for循環不是互斥的。我知道很多人喜歡避免for循環,但是到最後,您要遍歷表的列,並且for循環旨在進行迭代。
namesDefaultToHere(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
arr = [=>];
arr["name"] = "first name";
arr["age"] = "age";
arr["sex"] = "gender";
arr["height"] = "height (inches)";
arr["weight"] = "weight (lbs)";
for (i=1,i<=ncols(dt),i++,
cname = column(i)<<GETNAME></GETNAME>回复:關聯數組重命名數據表列你好@戴維·伯納姆,
感謝您的反饋意見。 我顯然需要對關聯數組進行更多閱讀。 我不太在意For Loops,但希望以更優雅的方式編寫重命名代碼。 到另一個線程的鏈接是一個非常優雅的解決方案,可以根據另一列的數字條目對列值進行重新排序。 關聯數組在該腳本中的工作方式是我認為它適用於表列的方式,但顯然沒有。 過去,我使用列表{...}使用For Loops對列進行了重命名,但希望嘗試一種不帶循環的不同方法。 但是,我確實喜歡您介紹的關聯數組方法,並且會以這種方式而不是構建列表來進行操作。
我想我在想,有了第一個數據表中的列名列表和第二個數據表中的關聯數組,就可以很容易地由於關聯數組而重新分配名稱,幾乎就像該列的“ recode”函數一樣名稱。
無論如何,我感謝您對使用關聯數組重命名列的問題所給予的答復和解決方案。 是時候回到數據了!
謝謝!,
DS
回复:關聯數組重命名數據表列為了清楚起見,我對數組內容進行了硬編碼,以便有一個有效的示例-從單獨的表填充鍵和值仍然有意義。還請注意,不需要任何評估,Expr等。祝您好運。
回复:關聯數組重命名數據表列你好@戴維·伯納姆,
是的,我遵循您的示例並理解了硬編碼。 使用“名稱”和“代碼”列的另一個表時,創建關聯數組很容易(注意:必須以正確的順序),以便在設置列名時將正確的值應用於匹配鍵。 我運行它,它運行良好。 再一次感謝你的幫助!
DS