将分类字符变量转换为SAS中的数值

时间:2017-03-24 06:52:54

标签: sas

我的分类变量有四个级别 - 东,西,北,南。我希望这些级别为1,2,3,4(数字形式)。我如何在SAS中做到这一点?谢谢!

2 个答案:

答案 0 :(得分:1)

有理由选择INFORMAT而不是FORMAT来创建数字变量。

proc format cntlout= cntl;
    value $numvar
        east = 1
        west = 2
        north = 3
        south = 4
        other=.
    ;
    invalue numvar(upcase)
        EAST = 1
        WEST = 2
        NORTH = 3
        SOUTH = 4
        other=.
    ;
   run;
data _null_;
   do x='norTH' , 'South' , 'East' , 'west' , 'outer';
      length b 8;
      b = put(x,$numvar.);
      c = input(x,numvar.);
      put _all_;
      end;
   run;    

注意不同的结果并且没有转换注意:

43         data _null_;
44            do x='norTH' , 'South' , 'East' , 'west' , 'outer';
45               length b 8;
46               b = put(x,$numvar.);
47               c = input(x,numvar.);
48               put _all_;
49               end;
50            run;

NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
      46:11   
x=norTH b=. c=3 _ERROR_=0 _N_=1
x=South b=. c=4 _ERROR_=0 _N_=1
x=East b=. c=1 _ERROR_=0 _N_=1
x=west b=2 c=2 _ERROR_=0 _N_=1
x=outer b=. c=. _ERROR_=0 _N_=1
NOTE: DATA statement used (Total process time):

答案 1 :(得分:0)

最简单也是最合适的方法是创建格式:

proc format;
    value $numvar
        east = 1
        west = 2
        north = 3
        south = 4
    ;
run;

在数据步骤中,您只需创建新的数字变量:

/* data step code */
new_var = put(your_categorical_variable, $numvar.);
/* data step code */

这种方法的优点是您可以在必要时轻松更改编码 - 仅在proc格式中进行更改,而不是在转换变量的所有数据步骤中进行更改。使用硬编码时,这是不可能的

if var='east' then new_var=1 ...