問題
問題 1:我需要獲取數據表列中唯一值的列表。
問題 2:我需要獲取 JSL 數據結構(列表或矩陣)中唯一值的列表
解決方案
對於問題1:
解決方案一:使用匯總表。下面的 JSL 顯示瞭如何使用 Summary() 來獲取一個表,該表的一行中的每個唯一值都位於單個列中。然後,您可以執行進一步的 JSL 表命令以從匯總表中獲取這些值。
_dt = Open( "$sample_data/big class.jmp" );
//create a summary table of the :sex column
_dt1 = _dt << Summary(
Group( :sex ),
Freq( "None" ),
Weight( "None" )
);
//create a summary table of the :age column
_dt2 = _dt << Summary(
Group( :age ),
Freq( "None" ),
Weight( "None" )
);
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><span class="lia-inline-image-display-wrapper" image-alt="2-13-2018 5-22-08 PM.png" style="width: 280px;"><img src="https://us.v-cdn.net/6038925/uploads/images/9328i5A075F342798D202/2-13-2018%205-22-08%20PM.png" role="button" title="2-13-2018 5-22-08 PM.png" alt="2-13-2018 5-22-08 PM.png" /></span></SPAN></SPAN>
問題2:
現在,您擁有 JMP 列表或矩陣,而不是數據表:
sexlist = {"F", "M", "M", "F", "F", "M", "M", "F", "M"};
agelist = [14, 11, 12, 13, 15, 17, 15, 11, 12];執行此操作的複雜方法是:
a) 將列表中的值放入新的數據表列中,然後使用匯總方法,或者
b) 編寫一個稍微複雜的 for 循環來搜索並記錄唯一值
幸運的是,有一種更簡單的方法,即使用關聯數組。
Associative Array(sexlist) << Get Keys;
Associative Array(agelist) << Get Keys;
分別返回 {"F", "M"} 和 {11, 12, 13, 14, 15, 17}(請注意,這些是很好的排序列表!)。如果您希望數值作為排序向量,您可以使用
Matrix(Associative Array(agelist) << Get Keys);
返回 [11, 12, 13, 14, 15, 17]。
此方法也可以用來代替問題 1 的解決方案 1:
問題1,解決方案2:Associative Array(Column(_dt, "sex") << Get Values) << Get Keys;<BR />Matrix(Associative Array(Column(_dt, "age")<< Get Values)<<GET keys=""></GET>
回報分別為{“F”、“M”}和[11、12、13、14、15、17]。 這是在做什麼
- 以列表(如果列是字符)或矩陣(如果列是數字)的形式獲取指定列中的值
- 將該列表或矩陣轉換為關聯數組
- 獲取關聯數組的鍵,在本例中是列中值的唯一級別,並將其作為列表返回
- (如果在結果列表上使用 Matrix(),則僅當列表中的值都是數字時才有效)。
Summarize() 比關聯數組高效得多,對於 200 萬行數據(1 秒與 8 秒延時),這一點非常明顯。 如果性能至關重要,請盡可能使用 Summarize()。
Summarize( dt, smrz1 = by( : 性別 ) ); Summarize( dt, smrz2 = by( :age ) );
* Summarize() 不會創建中間數據表 << Summary
關聯數組的優點在於它節省了將列表/矩陣放入數據表的工作,這是小數據量的完美解決方案。