/** 多维标度分析 **/
proc transpose data=brand out=tmpbrand;
/*brand数据的行代表152个人,列代表20个品牌特征。
使用transpose过程对其进行转置,输出数据集tmpbrand的行代表20个品牌特征,
列代表152个人,缺省的列名为col1、col2、...、col152。
此外,tmpbrand中还会生成两个新的列:
"_name_"表示原brand数据集中各列(品牌特征)的名称,
"_label_"表示原brand数据集中各列(品牌特征)的标签。*/
run;
proc distance data=tmpbrand out=distbrand method=cityblock;
/*使用distance过程计算数据集tmpbrand中各行
(即原brand数据集中各品牌特征)之间的距离。
输出数据集distbrand记录了计算出的距离矩阵。
计算距离的方法为"cityblock",即两行之间的距离为各列的差异的绝对值之和,
也就是说两个品牌特征之间的距离是152个人给这两个特征评分的差异的
绝对值之和。*/
var interval(col1-col152);
/*指明用于计算距离的列为定序变量col1至col152*/
id _name_;
/*指出数据集tmpbrand中"_name_"列(即品牌特征的名称)代表了各行的ID*/
run;
proc print data=distbrand;
run;
proc mds data=distbrand out=out;
id _name_;
/*使用mds过程进行多维标度分析。
输入数据集为前面计算出的距离矩阵。
输出数据集out中:
第一行记录了应力函数的值(这里为8.7%,说明拟合优度还可以),
其它行记录了各品牌特征在低维空间(缺省为2维)对应的坐标。*/
run;
%plotit(data=out, datatype=mds, labelvar=_name_);
/*使用SAS中系统定义的plotit宏函数在投射的