sql字符型转换为数值型_SAS变量类型转换

02abf145609bcd133ea9871adcd60869.png

SAS中变量可以分为数值型变量和字符型变量,我们希望一些特定的变量是数值型的,尤其对于连续型变量,比如年龄,身高,体重等,以便于进行数值运算。试想,如果身高是字符型变量,我们是无法计算其均值的。同时,我们也希望一些特定变量是字符型的,比如身份证号码,我们只希望其是一个标识,并不需要对其进行运算;如果身份证号码是以数值型变量出现,由于其比较长,除非特别设定format格式,不然SAS中往往不能完整的展示出来。实际数据分析中,将字符型变量转换为数值型变量最为常见。

但是在实际导入excel数据后,有时候产生的SAS变量类型并不跟我们所期望的相同,这时候就需要对变量类型进行转换,我们下面对变量类型变换方法进行介绍。

(一)数值型变量转换为字符型变量

3b57e593093514b4ce5b924abf643346.png
Sashelp.class

我们以Sashelp逻辑库中的class数据集为例,可以看到年龄,身高,体重是数值型变量,这可以直接根据变量值是右对齐进行判断。我们如何将它们转化为字符型呢(没有实际意义,仅仅为了展示学习)?

我们可以通过put函数将数值型变量转化为字符型:

data class;
  set sashelp.class(rename=(age=C_age height=C_height weight=C_weight));
  age=put(C_age,$8.);
  height=put(C_height,$8.);
  weight=put(C_weight,$8.);
  drop C_age C_height C_weight;
run;

proc print data=class;
run;

结果如下:

d3e3e12aa6152c81d009c22dcb143217.png

可以看到这三个变量的值已不是右对齐,而是向左边对齐,这说明这三个变量类型已经转换成了字符型(可以双击SAS数据集的变量进行确认)。

上面的程序中,我们首先需要使用rename语句将三个变量名进行更换,age,height,weight分别更改为C_ageC_height和C_weight。在变量类型进行转换完毕后,再drop这三个变量。记住,我们在更改变量类型时,是不能够将变量名更改变量类型,再赋值给同一个变量的,比如下面形式:

data class;
  set sashelp.class;
  age=put(age,$8.);
  height=put(height,$8.);
  weight=put(weight,$8.);
run;

日志会显示:

6591c78f01c85220864445d2964bf43c.png

显示变量类型没有更换成功。

所以,我们需要首先将变量rename为其它变量名,转换变量类型时在赋值给原先的变量,或者直接赋值给另外的变量。

put函数中,第一个参数为需要转换类型的数值型变量名,第二个参数为想要转换成为的字符型变量格式。

drop语句中,drop C_age C_height C_weight 会显得有点累赘,尤其当变量比较多时,我们可以用drop C_: 来代替drop C_age C_height C_weight,如下面程序:

data class;
  set sashelp.class(rename=(age=C_age height=C_height weight=C_weight));
  age=put(C_age,$8.);
  height=put(C_height,$8.);
  weight=put(C_weight,$8.);
  drop C_:;
run;

proc print data=class label;
run;

put函数除了能将数值型变量转化为字符型变量,还可以将字符型变量的当前输出格式转换为另外一种格式,而在行使这一功能时,可以不用更改变量名。如下所示:

data class;
  set sashelp.class;
  Name=put(Name,$4.);
run;
proc print data=class;
run;

我们将Sashelp.class中姓名变量更改为另外一种格式。结果如下所示:

7857f0d96e6f8f51e0ed47f3a2ea9647.png

(二)字符型变量转换为数值型变量

有时当我们导入excel数据到SAS中,产生SAS数据集时,原先本来连续的数值型变量在SAS中却莫名其妙的是字符型。有时候我们并不知道这种情况发生,而在当我们进行统计计算时,比如运行下面程序:

proc means data=class;
   var age height weight;
run;

对class数据中的年龄,身高,体重进行描述性统计时,日志会显示:

02018329b9dd201e6f9a35afcd75a1b1.png

这时,我们就要将这些字符型变量转换为数值型变量,再进行统计描述了。

我们使用input函数,将字符型变量转换为数值型变量,如下面程序所示:

data class;
  set class(rename=(age=C_age height=C_height weight=C_weight));
  age=input(C_age,best8.);
  height=input(C_height,best8.);
  weight=input(C_weight,best8.);
  drop C_:;
run;

类型转换好后,再对这些变量进行统计描述,可以看到输出窗口显示结果,日志中也无异常。结果如下所示:

0305e887a03857ac8fd8b327f7115cb4.png

input函数中,第一个参数是需要进行变量类型转换的字符型变量,第二个参数为希望得到的数值型变量的格式,我们使用best8.格式,让SAS在规定的宽度为8的情况下自动选择提供信息最多的表示方式。

除了input函数可以将数值型转化为字符型外,还有一种更简单的方式,如下面程序所示:

data class;
  set class(rename=(age=C_age height=C_height weight=C_weight));
  age=C_age+0;
  height=C_height+0;
  weight=C_weight+0;
  drop C_:;
run;

该语句实现input函数同样功能,能自动将字符型转换为数值型。日志显示如下:

d7949f37c58e43a067f56880c9ced2c4.png

从日志也可以看出,字符型自动转换为了数值型。

以上就是对SAS变量类型转换的简单介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值