楼主: flyinglancet68
16653 9

SAS日期转换 [推广有奖]

  • 0关注
  • 0粉丝

高中生

27%

还不是VIP/贵宾

-

威望
0
论坛币
27 个
通用积分
0.1500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
577 点
帖子
25
精华
0
在线时间
13 小时
注册时间
2008-1-22
最后登录
2025-5-9

楼主
flyinglancet68 发表于 2013-8-15 16:20:31 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

已有sas数据集,变量“日期”的格式为字符型,如下,通过input函数可以转换成日期时间格式,但其中会用到一个日期格式函数,忘记了,哪位大侠指导下?谢谢!

(其中的日期和时间都不是标准日期和时间)

2013-2-21 8:28:51
2013-2-21 8:35:29
2013-2-21 8:36:41
2013-3-1 16:41:16
2013-3-1 16:47:27
2013-3-1 16:43:53
2013-3-1 16:45:12
2013-3-1 16:52:07
2013-3-1 16:52:37
2013-3-1 16:52:40
2013-3-1 16:41:17
2013-3-1 16:45:34


二维码

扫码加我 拉你入群

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

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

关键词:日期转换 sas数据集 Input put函数 put

沙发
吕小布韦 发表于 2013-8-15 16:25:13
用mdy和substr.假设你这个日期变量叫做date,新建一个日期变量date1:
date1=mdy(substr(date,6,1),substr(date,8,2),substr(date,1,4));
你试试.不过这个写法只能用于月份位数只有一位的时候.
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100   查看全部评分

藤椅
吕小布韦 发表于 2013-8-15 16:28:10
如果你的数据中month既有两位数的又有一位数的,那么你就用一下scan这个函数.
date1=mdy(scan(date,2),scan(date,3),scan(date,1));

板凳
flyinglancet68 发表于 2013-8-15 16:30:11
谢谢,但是我的数据中,月份和天长度是不固定的,有的是2位,有的是1位

报纸
flyinglancet68 发表于 2013-8-15 16:34:30
也不行的,用了您的语句,
字符'2013-3-1 16:41:16'的结果是01JAN1960:05:23:38

地板
flyinglancet68 发表于 2013-8-15 16:40:58
谢谢!可以暂时用这个方法替代一下,呵呵

7
吕小布韦 发表于 2013-8-15 16:44:39
data a;
input date $9. time $7.;
date1=mdy(scan(date,2),scan(date,3),scan(date,1));
datalines;
2013-2-21 8:28:51
2013-2-21 8:35:29
2013-2-21 8:36:41
2013-3-1 16:41:16
2013-3-1 16:47:27
2013-3-1 16:43:53
2013-3-1 16:45:12
2013-3-1 16:52:07
2013-3-1 16:52:37
2013-3-1 16:52:40
2013-3-1 16:41:17
2013-3-1 16:45:34
;
run;
我用这个试了试,没啥问题.你copy一下试试.
你最后发的那个里面01JAN1960:05:23:38

怎么1960和时间之间还有个冒号呀

8
flyinglancet68 发表于 2013-8-15 16:53:04
现在可以了,谢谢!

9
henryyhl 发表于 2013-8-16 09:53:11
就算是非标准形式的格式,用input函数仍然可以将其从字符格式转化为日期型~
input(date,yymmdd10.)
It's not going to be easy, but it is going to be worth it.

10
heatercool 发表于 2022-11-1 15:55:00
我也给你反馈下,这样可能更简单:代码如下:
data a;
input date $ 1-18;
cards;
2013-2-21 8:28:51
2013-2-21 8:35:29
2013-2-21 8:36:41
2013-3-1 16:41:16
2013-3-1 16:47:27
2013-3-1 16:43:53
2013-3-1 16:45:12
2013-3-1 16:52:07
2013-3-1 16:52:37
2013-3-1 16:52:40
2013-3-1 16:41:17
2013-3-1 16:45:34
;
run;

data a;
  set a(rename=(date=old));
  date=input(old,nldatm20.);
  day=datepart(date);
  Time=timepart(date);
  Format day yymmdd10. time tod8.;
run;

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

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