2017-06-17 90 views
-1

我必須將我的人口聚類在8 clusters。我正在使用proc fastclusk-means方法(以最小化羣集之間的差異)。觀察結果代表一個分數,所以即使在聚類過程之後,它們仍然是有序的。我注意到這樣:使用proc fastclus(SAS)維護意見訂購的K-means聚類

proc sort data=input.population; 
by score; 
run; 

proc fastclus data = input.population 
       maxclusters = 8 list 
       out = score_clus 
       converge = 0.01 maxiter = 100 
       least = 2 noprint; 
var score; 
run; 

程序沒有維護順序。有一種方法(可能是proc的一個參數),我可以使用另一種方法:最小化方差,但保持集羣內排序的分數。

回答

1

也許你可以在運行proc之前記下行順序,然後在每個集羣中進行排序?如果您想將其用作聚類維度,則將其標準化並將其作爲proc的輸入之一。

E.g.爲什麼不用這樣的額外變量創建視圖?

data input.v_population/view = input.v_population; 
set input.population; 
myorder + 1; 
run; 
0

要擴大user667489的回答。向數據添加一個ID或SORT_ORDER變量。然後在最後把它整理一下。

data cars/view=cars; 
set sashelp.cars; 
SORT_ORDER +1; 
run; 

proc fastclus data = cars 
       maxclusters = 8 list 
       out = score_clus 
       converge = 0.01 maxiter = 100 
       least = 2 noprint; 
var msrp; 
run; 

proc sort data=score_clus; 
by SORT_ORDER; 
run; 

這將創建與SORT_ORDER變量視圖,然後運行在視圖中的數據PROC FASCLUS,然後爲你想要的結果進行排序。