2017-06-17 172 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,然后为你想要的结果进行排序。