sas字符数字转

知乎以下内容原地址

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

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

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

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;
结果如下:
在这里插入图片描述

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

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

data class;
set sashelp.class;
age=put(age,$8.);
height=put(height,$8.);
weight=put(weight,$8.);
run;
日志会显示:
在这里插入图片描述

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

所以,我们需要首先将变量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中姓名变量更改为另外一种格式。结果如下所示:
在这里插入图片描述

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

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

proc means data=class;
var age height weight;
run;
对class数据中的年龄,身高,体重进行描述性统计时,日志会显示:
在这里插入图片描述

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

我们使用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;
类型转换好后,再对这些变量进行统计描述,可以看到输出窗口显示结果,日志中也无异常。结果如下所示:
在这里插入图片描述

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函数同样功能,能自动将字符型转换为数值型。日志显示如下:
在这里插入图片描述

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

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

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值