關聯數組重命名數據表列嗨 JMP 社區,
我有一個包含許多列的數據表 (dt1),我想重命名它們。 他們用奇怪的名字編碼。 但是,我有另一個數據表 (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 命令變得更好,這就是我想研究關聯數組的原因。 如果不可能,我會用蠻力 For-Loop 的方式來做。
感謝您對此的任何想法和反饋!
DS
數據表腳本Re: 關聯數組重命名數據表列你好@David_Burnham ,
是的,我按照你的例子理解了硬編碼。 當使用另一個包含 Name 和 Code 列的表時,很容易創建關聯數組(注意:必須以正確的順序排列),以便在設置列名時,它將正確的值應用於匹配的鍵。 我運行了它,它運行良好。 再一次感謝你的幫助!
DS
Re: 關聯數組重命名數據表列為了清楚起見,我對數組內容進行了硬編碼,以便我有一個工作示例 - 從單獨的表中填充鍵和值仍然有意義。另請注意,不需要任何 Eval、Expr 等。祝你好運。
Re: 關聯數組重命名數據表列你好@David_Burnham ,
感謝您的反饋意見。 我顯然需要更多地閱讀關聯數組。 我不太介意 For Loops,但希望以更優雅的方式編寫重命名代碼。 到另一個線程的鏈接是一個非常優雅的解決方案,可以根據另一列的數字條目對列值進行重新排序。 關聯數組在該腳本中的工作方式是我認為它適用於表列的方式,但顯然不是。 我過去曾使用列表 {...} 使用 For Loops 完成列重命名,但我想嘗試一種沒有循環的不同方式。 但是,我確實喜歡您介紹的關聯數組方法,並且會這樣做而不是構建列表。
我想我在想,使用第一個數據表中的列名列表和第二個數據表中的關聯數組,由於關聯數組,人們可以輕鬆地重新分配名稱,幾乎就像列的“重新編碼”函數名字。
無論如何,感謝您對我使用關聯數組重命名列的問題的答復和解決方案。 是時候返回數據了!
謝謝!,
DS
Re: 關聯數組重命名數據表列使用關聯數組和 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>