请选择 进入手机版 | 继续访问电脑版
楼主: hawkscry
2802 5

[问答] 关于SAS字段处理的问题 [推广有奖]

  • 4关注
  • 3粉丝

讲师

61%

还不是VIP/贵宾

-

威望
0
论坛币
558 个
通用积分
0.8500
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
5352 点
帖子
565
精华
0
在线时间
525 小时
注册时间
2009-8-2
最后登录
2023-9-15

hawkscry 发表于 2014-12-7 10:00:52 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
大家好,最近在处理SAS变量的时候遇到了问题, 不知如何解决,现将问题呈现,希望得到大家的帮助,问题是这样的,有个字段是手机通话时长,但是数据库里面的单位不统一,会有纯数字的,如20,表示20秒,有‘1分20秒’的,还有‘20秒’,还有‘1小时2分30秒’的,现在的任务是要将这些不一致的单位进行统一,我想到一个方法如下:
data a;
   input x $20.;
   cards;
1小时2分10秒
2分12秒
;
run;
data b;
   set a;
   x=tranwrd(x,'小时','*3600+');
   x=tranwrd(x,'分','*60+');
   x=tranwrd(x,'秒','*1');
run;

这样就将时间x转化为‘1*3600+2*60+10*1’的形式,
问题是如何将这个文本的时间计算表达式转化为相应的计算值呢?
二维码

扫码加我 拉你入群

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

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

关键词:Input cards Data card 时间计算 SAS

互联网金融,风控,模型开发
Tigflanker 发表于 2014-12-7 10:17:43 |显示全部楼层 |坛友微信交流群
  1. y = resolve(cats('%sysevalf(',x,')'));
复制代码
基于楼下mingfeng的回复,我修改了下
  1. data a;
  2.    input x $20.;
  3.    cards;
  4. 1小时2分10秒
  5. 2分12秒
  6. 1小时5秒
  7. 3秒
  8. ;
  9. run;

  10. data b(drop = prx h m s);
  11.   set a;
  12.   prx = prxparse('/(?:(\d*)小?时)?(?:(\d*)分)?(?:(\d*)秒)?/');
  13.   if prxmatch(prx,x) then do;
  14.     h = input(prxposn(prx,1,x), best.);
  15.     m = input(prxposn(prx,2,x), best.);
  16.         s = input(prxposn(prx,3,x), best.);
  17.         y = sum(max(h,0)*3600, max(m,0)*60, max(s,0));
  18.   end;
  19. run;
复制代码

使用道具

mingfeng07 学生认证  发表于 2014-12-7 11:36:59 |显示全部楼层 |坛友微信交流群
  1. data b;
  2. set a;
  3.    hour=input(scan(x,-3,'小时 分 秒'),8.);
  4.    minute=input(scan(x,-2,'小时 分 秒'),8.);
  5.    second=input(scan(x,-1,'小时 分 秒'),8.);
  6.    x=sum(hour*3600,minute*60,second);
  7. run;
复制代码

使用道具

hawkscry 发表于 2014-12-8 09:02:51 |显示全部楼层 |坛友微信交流群
Tigflanker 发表于 2014-12-7 10:17
基于楼下mingfeng的回复,我修改了下
谢谢,您的方法解决了问题,有一个问题。正则里面?:是什么意思,恕我才疏学浅哈

使用道具

hawkscry 发表于 2014-12-8 09:02:54 |显示全部楼层 |坛友微信交流群
Tigflanker 发表于 2014-12-7 10:17
基于楼下mingfeng的回复,我修改了下
谢谢,您的方法解决了问题,有一个问题。正则里面?:是什么意思,恕我才疏学浅哈

使用道具

Tigflanker 发表于 2014-12-8 10:23:19 |显示全部楼层 |坛友微信交流群
hawkscry 发表于 2014-12-8 09:02
谢谢,您的方法解决了问题,有一个问题。正则里面?:是什么意思,恕我才疏学浅哈
是说它所在的缓存区不做提取标记,换言,让它所在的缓存区圆括号变成单纯意义的括号。

Ex : (?:\w)(\d)     
\1 means the value from \d

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 05:05