Friday, October 28, 2011

Convert Categorical Variables to Dummy Variables

最简单的就是用if一个个的写;

其次是用array+do循环来做,这个categorical variable的值比较好才好,最好是1,2,3,4,5这种;别的值不是这么方便,因为不好放进do循环里面;用macro %qscan可以,但是麻烦;

第三个就是上次贴的一个macro,也是麻烦,而且做interaction不方便。

今天面试的时候被教了一招,用proc glmmod;举例如下:


options formdlim='$';
data name;
      input name $ sex$;
        x=1;
      cards;
      zhao f
      qian f
      sun  m
      li   m
      zou  m
      wu   m
      zeng f
      wang m
      zhao f
      wang f
      sun  m
      wu   f
      ;
run;

proc glmmod data=name outdesign=design outparm=parm;
      class name sex;
      model x = name sex name*sex;
run;
quit;

这时SAS产生两个data set,分别是design和parm;design中的变量(列)名都是以col开头的,这样方便于在proc reg或者别的地方调用;那么每个column到底指的什么意思,或者说对应的categorical variable的什么值?parm就是来说明这个问题的。parm指明了design中每个column的含义;

比如下面两表,parm说明:design中1指intercept,2-9指name,10-11是sex,后面的是interaction。这就清晰明了了。

PARM:

Design:

No comments:

Post a Comment