我必须将我的人口聚集在8 clusters
。我使用proc fastclus
和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的一个参数),我可以用它来建立另一个债券:最小化方差,但保持在集群内有序的分数。
答案 0 :(得分:1)
也许你可以在运行proc之前记下行顺序,然后在每个集群中进行排序?如果要将其用作聚类维度,请对其进行标准化并将其作为proc的输入之一提供。
E.g。为什么不用这样的额外变量创建一个视图?
UICollectionView
答案 1 :(得分: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
,然后根据需要对结果进行排序。