SAS中的变量类型仅包含两种:数值型和字符型变量,使用proc import过程把excel导入到SAS的时候,默认情况下SAS会扫描数据文件的前20行,并依据此为变量分配变量类型(即字符或数值型),但是有时候excel中的数据会掩盖自身变量信息,比如在EXCEL中某一列看似都是数字类型的,SAS会错误的把字符型变量读成数值型变量,从而为SAS中后续的统计过程带来不便。
比如SAS中导入的class数据集中年龄为字符型变量,此时进行统计分析,日志会提示错误,导致统计分析过程错误。
为了避免这种情况的发生,我们需要对变量类型进行转化:
New-variable-name=input (old-character,informat.);
该语句适用于把字符型变量转换为数值型变量
New-variable-name=put ( old-numeric,format. );
该语句适用于把数值型变量转换为字符型变量,New-variable-name为欲生成的新变量的名称;old-character / old-numeric为待转换的原始变量的名称;informat.为变量的输入格式,注意后面的小数点,这是数值型变量的格式w.d,一般我们直接使用”best.”定义(w代表长度,d代表小数点后的位数);format.为变量输出格式,注意后面的小数点,这是字符型变量的格式$w.;
为了方便大家理解,举个例子,例如:把sashelp.class数据集中的年龄改成字符型变量,这里笔者仅是为了演示,实际中年龄当然是数值型变量;
data class1(drop=age);set sashelp.class;age1=put(age,$2.);/*把age变量转成字符型变量,并赋值给age1*/label age1= "年龄";/*把标签年龄赋值给age1*/rename age1=age;/*把变量age1重命名为age*/run;
然后把class1数据集中的年龄(字符型变量)改成数值型变量:
data class2(drop=age);set class1;age1=input(age,best.); /*把age变量转成数值型变量,并赋值给age1*/label age1= "年龄";/*把标签年龄赋值给age1*/rename age1=age;/*把变量age1重命名为age*/run;
通过以下语句查看变量的描述,可查看到变量类型已经成功转换。
proc contents data=class1/ data=class2;run;