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