楼主: huzhenghui
19062 19

[问答] sas字符型转数字 [推广有奖]

  • 0关注
  • 0粉丝

本科生

6%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
2871 点
帖子
27
精华
0
在线时间
105 小时
注册时间
2010-10-26
最后登录
2023-2-7

楼主
huzhenghui 发表于 2010-12-24 16:48:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一个数据集,里面连数字都是字符型的,基本的MEAN都求不了,急死我了,不知道怎样能转成数字型。

           ID        Z_H        T_H        F_P_F_H        S_H        T_F_H        F_E_H        S_T_H        
        201        4.005        4.362        11.015        18.234        4.605        4.083        3.519        
        202        <2.000        2.653        7.139        8.882        <2.000        <2.000        <2.000        
        203        <2.000        2.749        20.344        16.987        2.394        2.288        <2.000        
        204        <2.000        4.181        13.181        5.27        <2.000        <2.000        <2.000        
        205        <2.000        5.22        21.66        10.584        3.706        <2.000        <2.000        
        206        2.087        4.085        14.424        14.213        2.699        <2.000        <2.000        
        207        <2.000        3.558        11.099        6.084        2.81        <2.000        <2.000
本文来自: 人大经济论坛 SAS专版 版,详细出处参考:http://www.pinggu.org/bbs/viewthread.php?tid=997359&page=1&from^^uid=2249366
这是从数据库里得到的数据,只复制了前几列(大概有30列左右),前几个观测值(大概有1万左右);
我已把<2.000的变成了2.000,然后就不知道怎样把字符型转成数字,求高手指点!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:字符型 mean 怎样能 不知道 数据集 SAS 数字 字符

回帖推荐

elek.me 发表于10楼  查看完整内容

刚好有时间,给楼主写了一个简单的批量转换方法,不过这个批量转换的前提是:数据集里必须是可以转换为数值型的字符型变量,而且是全部自动转换。 不过如果需要其他的条件,也可以在这个程序里设置其它条件, 这个就留给楼主自己发挥吧。

本帖被以下文库推荐

多学多看

沙发
elek.me 发表于 2010-12-24 16:59:08
建立新变量,用 input 函数把原字符变量转换为数值型,赋值给新变量。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

藤椅
huzhenghui 发表于 2010-12-24 18:58:48
里面的列名很多,不是每个都变吧!能不能重新生成一个数据集,把里面的数据变成数字型的呢!
多学多看

板凳
elek.me 发表于 2010-12-24 20:59:22
应该是的。 不过直接批量的转换也可以写,不过要用到一些其它方法,稍微麻烦些。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

报纸
leedx 发表于 2010-12-24 21:27:29
LS说的方法怎么实现,我也遇到了同样的问题,想知道~

地板
elek.me 发表于 2010-12-24 21:58:24
我觉得你们可以拿个数据集出来,否则不好解决。
而且尽量把可能存在的,需要处理的问题,尽量都放到这个数据集里去。
我的博客: http://elek.me/sas
联系我: http://about.me/elek

7
huzhenghui 发表于 2010-12-24 22:45:59
ID        Z_H        T_H        F_P_F_H        S_H        T_F_H        F_E_H        S_T_H       
        201        4.005        4.362        11.015        18.234        4.605        4.083        3.519       
        202        <2.000        2.653        7.139        8.882        <2.000        <2.000        <2.000       
        203        <2.000        2.749        20.344        16.987        2.394        2.288        <2.000       
        204        <2.000        4.181        13.181        5.27        <2.000        <2.000        <2.000       
        205        <2.000        5.22        21.66        10.584        3.706        <2.000        <2.000       
        206        2.087        4.085        14.424        14.213        2.699        <2.000        <2.000       
        207        <2.000        3.558        11.099        6.084        2.81        <2.000        <2.000
多学多看

8
huzhenghui 发表于 2010-12-25 08:42:34
我从数据库里面读取的数据,数据很多,只复制了前几列的前几个观测值,已把<2.000的变成了2.000!现在就不知道怎样把所有的类型转成数字
多学多看

9
Rock2000 发表于 2010-12-25 09:53:49
最笨方法,每一个变量处理一次。
Z_H1=Z_H+1-1;

10
elek.me 发表于 2010-12-25 15:31:25
刚好有时间,给楼主写了一个简单的批量转换方法,不过这个批量转换的前提是:数据集里必须是可以转换为数值型的字符型变量,而且是全部自动转换。
不过如果需要其他的条件,也可以在这个程序里设置其它条件, 这个就留给楼主自己发挥吧。
  1. data have;
  2.         input (ID Z_H T_H F_P_F_H S_H T_F_H F_E_H S_T_H) ($);
  3. cards;
  4. 201        4.005        4.362        11.015        18.234        4.605        4.083      3.519
  5. 202        2.000        2.653        7.139        8.882        2.000        2.000        2.000
  6. 203        2.000        2.749        20.344        16.987        2.394        2.288      2.000
  7. 204        2.000        4.181        13.181        5.27        2.000        2.000        2.000
  8. 205        2.000        5.22        21.66        10.584        3.706        2.000        2.000
  9. 206        2.087        4.085        14.424        14.213        2.699        2.000      2.000
  10. 207        2.000        3.558        11.099        6.084        2.81        2.000        2.000
  11. ;

  12. data _null_;
  13.         set have;
  14.         array tmp[*] _character_;
  15.         call symputx("nvar",dim(tmp));
  16. run;


  17. data tmp;
  18.         set have end=eof;
  19.         array tmp[*] _character_;
  20.         length vars $ 32767;
  21.         retain vars "";
  22.         array num[&nvar.];
  23.         do i=1 to dim(tmp);
  24.                 num[i]=input(tmp[i],best.);
  25.                 if eof then vars=catx(" ",vars,cats(vname(num[i]),"=",vname(tmp[i])));
  26.         end;
  27.         if eof then call symputx ("vars",vars);
  28.         drop _character_ i;
  29. run;

  30. data want;
  31.         set tmp;
  32.         rename &vars.;
  33. run;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

我的博客: http://elek.me/sas
联系我: http://about.me/elek

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 08:04