楼主: elliott828
1826 6

[原创博文] 求教关于处理字符类数据的思路 [推广有奖]

  • 0关注
  • 0粉丝

本科生

20%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
890 点
帖子
57
精华
0
在线时间
58 小时
注册时间
2009-5-7
最后登录
2016-6-5

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
手头上有一个来自于问卷调查的数据。是对针对一系列同类产品的所作出的问卷调查。

问卷所得数据的特点
1,六个被解释变量response variables(四个代表对产品的喜好程度,两个代表购买意向), 100余个解释变量explanatory variables(产品名称,对产品的描述,产品使用后的反馈意见等等),2000多个observations。
2,所有变量均为字符型数据。进一步可细分为两类,一类是对产品的文字性描述,全部是用字母作为数据值的;另外一类是代表喜好程度,赞同程度,或者代表不同选项的数字,比如喜好该类产品,则有1-7不同的数字表示,数字越大表示越喜欢该类商品。
3,有四个特殊变量,年,月,用户ID和产品名称。四个变量均有重复值,尤其是用户ID,由于一个用户有可能同时使用了调查范围类的多个产品,所以一个ID可能重复出现多次(大部分ID都重复出现了两次或者多次),也可能只出现一次。
4,问卷分两个阶段,第一个阶段是第一次使用时得到的意见,第二个阶段是使用N天以后的意见。

希望得到的结果
1,对产品(近30个)进行分类,说出各类产品的大致特征。
2,找出能将喜好程度和购买意向最大化的变量。

我的处理方法:
1,由于用户ID有重复,所以我用retain语句新建一个变量,相当于一个新的ID,有多少个obs就有多少个ID的值,不重复,然后对此进行ACM 和 classification。得出的结果是对2000多个观测值进行的分类。然后用proc freq对解释变量和被解释变量进行成对的具体分析,可以得到每个分组的特征值。
2,由于有六个被解释变量,所以也可以考虑使用multivariate model进行分析,但是我还没有着手,完全卡在了上一步。

遇到的问题
1,由于用户ID有重复,如果我以新建的ID为标准进行分类,那么得到结果就有可能出现这种情况:同样的一个用户,有可能会因为对不同产品的不同喜好而被分到两个组里去,这是不希望被看到的结果。这样会误导最后的市场决策。所以尽量不要考虑对obs进行分类,但是如果不对这个分类,又能对什么分类呢?或者说,应该怎样对用户ID或者产品进行分类呢?
2,做ACM的时候,我做了一个图,但是由于变量过多,图中显示出来的各个点的分布十分紧密,好多数据值根本看不出来是什么;另外,proc corresp导出的表格里只显示了每个变量对应的数据值以及他们对应在各个dimensions(或者是axes)里面的值,无从得知这些值分别属于哪些变量。这种情况下应该怎么处理?
3,做classification的时候我用了几种方法,先是用tree,后来用mobile center 。用前者处理的时候,obs根据我用的宏直接分成了50个clusters,但是我根本不知道这50个clusters代表什么。。。

所以在此求教各位,对这种dataset,我可以使用哪种方法来得到自己想要的结果?怎么解决上述问题?

我把我用过的宏放在下面几楼,对于简单数据,这几个宏还是很好用的,但是数据一大就。。。仅供交流。。。

谢谢啦!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Multivariate observations observation multivariat explanatory 产品 字母

沙发
elliott828 发表于 2010-7-13 05:45:43 |只看作者 |坛友微信交流群
这是我用proc corresp对数据进行ACM的code:
proc corresp data=a observed out=resul mca dim=8;
tables Q1OL Q2OL Family_1 Family_2 Family_3 YoB Age_group RQ1 RQ2 RQ3 (等等一系列数据略去);
sup    YoB Age_group RQ1 RQ2 RQ3(又是等等一系列数据略去);
run;

其中Q1OL Q2OL就是6个被解释变量中的2个,其他4个被在此省略了
后来我又去掉了supplementary语句,直接对所有变量进行ACM分析
la croyance

使用道具

藤椅
elliott828 发表于 2010-7-13 05:58:57 |只看作者 |坛友微信交流群
把resul表格图像化


%macro pacm(ident=_name_,x=1,y=2,nc=4,tp=0.8);

%*    x : No. of horizontal axis;
%*    y : No. of vertical axis;
%*   nc : max number of caracters;

data anno;
set resul;
retain  xsys ysys '2';
%*  style='swissb';
y= dim&y;
x= dim&x;
coul=substr(&ident,1,1);
text=substr(&ident,1,&nc);
size=1;
select;
when(coul in('A' 'a')) color='magenta';
when(coul in('B')) color='brown';
when(coul in('C' 'c')) color='red';
when(coul in('D')) color='DERO';
when(coul in('E')) color='cream';
when(coul in('F' 'o')) color='cyan';
when(coul in('G')) color='gold';
when(coul in('H')) color='gray';
when(coul in('I' 'b')) color='green';
when(coul in('J')) color='lilac';
when(coul in('K')) color='lime';
when(coul in('L')) color='maroon';
when(coul in('M')) color='olive';
when(coul in('N' 'c')) color='orange';
when(coul in('O')) color='pink';
when(coul in('P')) color='purple';
when(coul in('Q')) color='rose';
when(coul in('R')) color='salmon';
when(coul in('S')) color='blue';
when(coul in('T')) color='steel';
when(coul in('U')) color='tan';
when(coul in('V')) color='violet';
when(coul in('W')) color='vigb';
when(coul in('X')) color='black';
when(coul in('Y')) color='yellow';
when(coul in('Z')) color='STV';

when(coul in('0')) do; color='red';text='.';size=&tp;end;
otherwise do; color='black';text='.'; size=&tp;end;
end;
label y = "Axe &y"
       x = "Axe &x";
keep x y text xsys ysys size color;
proc gplot data=anno;
title;
axis1  length=14cm;
axis2  length=9cm;
symbol v=none;
plot y*x / annotate=anno frame  href=0 vref=0
  haxis=axis1 vaxis=axis2 ;

run;
goptions reset=all;
quit;
%mend;
la croyance

使用道具

板凳
elliott828 发表于 2010-7-13 06:22:55 |只看作者 |坛友微信交流群
用tree做classification的时候选定class的数量:

%macro nc(dataset, listvar, nc, method=ward);
%* Classification, with help of choosing the number of classes;
%*   dataset : table containing the data;
%*   listvar : list of numeric variables;
%*   method : hierarchical
classification;
%*   nc      : number of class (10% of n);

options linesize=132 pagesize=66 number;
data donnees;
     set sasuser.&dataset (keep=&listvar);
run;
proc fastclus data=donnees maxclusters=&nc out=sortie1
              cluster=classe mean=stat noprint;
     var &listvar;
run;
proc cluster data=stat method=&methode
             outtree=tree noprint;
     id classe;
     var &listvar;
     freq _freq_;
run;
proc sort data=tree;
     by _ncl_;
run;
proc tree data=tree out=table
  nclusters=&nc graphics  horizontal;
  copy &listvar;
  id classe;
run;
proc sort data=table;
     by cluster;
run;
proc means data=table ;
     var &listvar;
     by cluster;
     output out=poles;
run;
data poles(drop=_type_);
     set poles;
     if _stat_='MEAN';
run;
%mend;
la croyance

使用道具

报纸
elliott828 发表于 2010-7-13 06:25:32 |只看作者 |坛友微信交流群
选择class数量的方法:
%macro criteria(nc);
%* criteria of choosing the number of classes;

proc sort data=tree;
   by _ncl_;
run;
data sprsq (keep= _ncl_ _sprsq_)
     ccc   (keep= _ncl_ _ccc_)
     FT2   (keep= _ncl_ _psf_ _pst2_);
   set tree;
   by _ncl_;
   if first._ncl_;
   output sprsq;
   if _ccc_ ne . then output ccc;
   if _psf_ ne . and _pst2_ ne . then output FT2;
run;
proc gplot data=sprsq;
   where _ncl_< &nc and _ncl_ ne 1;
   plot _sprsq_*_ncl_;
   symbol1 i=join;
run;
goptions reset=all;
quit;
%mend;
la croyance

使用道具

地板
elliott828 发表于 2010-7-13 06:29:37 |只看作者 |坛友微信交流群
最后一个宏,就是我说的用mobile center的方法来进行classification:

%macro nudnc(dataset,idvar,listvar,nc,init=_null_);

data donnees;
     set sasuser.&dataset (keep=&listvar &idvar);
run;
proc fastclus data=donnees maxclusters=&nc
              out=sasuser.ndclasse(keep=&idvar &listvar classe)
              seed=&init
              cluster=classe
              mean=stat;
     var &listvar;
     id &idvar;
run;
proc sort data=sasuser.ndclasse;
     by classe;
run;
proc print;
     by classe;
run;
%mend ;
la croyance

使用道具

7
elliott828 发表于 2010-7-13 15:02:26 |只看作者 |坛友微信交流群
no one answers...
ToT
la croyance

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-9-20 06:50