2013-10-28 84 views
1

当前我正在使用SAS中的proc discriminm对数据集运行kNN分析,但问题可能需要我获取表中每行的前k个邻居列表,所以我如何才能从此列表中获取此列表SAS?SAS中的最近邻居:如何获取每行的邻居列表?

感谢您的回答,但我在寻找每个数据点的邻居列表,例如,如果我得到了一组数据: 名年龄邮编酒精 约翰26 08439是 凯蒂49 47789没有 史密斯37 90897没有 汤姆34 88642是

然后我需要清单:

名neighbor1 neighbor2 约翰·汤姆·凯西 凯茜汤姆·史密斯 史密斯凯西汤姆 汤姆约翰·凯西​​

我无法从SAS中找到这个输出,是否有任何可以编程来获取此列表的内容?谢谢!

+0

感谢您的答案,但我正在寻找每个数据点的邻居列表,例如,如果我有数据集: – user2926523

+0

在这里问了一个类似的问题:https://stats.stackexchange.com/问题/ 276866 /如何使用的近邻找到的相似 - 人口 - 基于上列表中的功能/ 279934#279934 – hannafrc

回答

1

我不是一个SAS用户,但快速的Web查询似乎给你的问题很好的答案:

据我所知,你不必自己去实现它。 DISCRIM就足够了。

代码虹膜数据从http://www.sas-programming.com/2010/05/k-nearest-neighbor-in-sas.html

ods select none; 
proc surveyselect data=iris out=iris2 
        samprate=0.5 method=srs outall; 
run; 
ods select all; 

%let k=5; 
proc discrim data=iris2(where=(selected=1)) 
      test=iris2(where=(selected=0)) 
      testout=iris2testout 
      method=NPAR k=&k 
      listerr crosslisterr; 
     class Species; 
     var SepalLength SepalWidth PetalLength PetalWidth; 
     title2 'Using KNN on Iris Data'; 
run; 

长期和详细说明产品相关图片浏览: http://analytics.ncsu.edu/sesug/2012/SD-09.pdf

而且从SAS社区:

简单地问PROC DISCRIM到使用选项“METHOD = NPAR K =”使用非参数方法。请注意,不要同时使用“R =”选项,这与基于半径的最近邻居方法相对应。还要注意PROC DISCRIM如何自动处理分类数据。有时,您可能需要提前将分类数据更改为度量标准坐标。由于PROC DISCRIM不会输出它内部构建的树,因此使用“data = test = testout =”选项对新数据集进行评分。