SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 869|回复: 7
打印 上一主题 下一主题

数据格式问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-6-29 04:08:20 | 只看该作者

数据格式问题

我的数据库里,时间的格式是06/30/2000,但是这是个字符型,请问
提取成显示为季度的信息,比如Jan2000或2000Q1?
还有,如果数据本身是datetime型的,我如何从中提取日期或年或季度信息呢?

本人在做summer paper,请各位帮忙解答,时间紧迫,在此谢谢各位。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-6-29 09:04:02 | 只看该作者

试试这个

1、
[code:bd50d]data tem;
  set tem1;
  y=year(date);
  m=month(date);
  q=int(m/4)+1;
  d=yyq(y,q);
  format d yyq.
run;[/code:bd50d]
其中date为数据集tem1中的日期变量
2、
使用函数datepart(datetime)即从日期时间变量中提取日期。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-6-30 06:34:15 | 只看该作者

simple answer

data _null_;
dat=input('06/30/2000',mmddyy10.);
put dat yyq7.;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-7-2 01:37:39 | 只看该作者

谢谢大家

谢谢大家。很有用。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-8-23 10:27:20 | 只看该作者

续问

若要在一个data中增加一个日期变量,要求是字符型的(不是要求用print过程后显示是'01/03/02'的形式,而是要求打开这个data就显示是是'01/03/02'的形式,而不是数值型),请问得如何做?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-8-23 13:44:21 | 只看该作者

re

首先用datepart函数,再转换ddmmyy8.,这样输出的就是字符型的了。

例如:
data tmp1;
format datetime datetime20.;
format datetime datetime20.;
input datetime;
cards;
10000000
20000000
30000000
;
run;

data tmp2;
set tmp1;
date=put(datepart(datetime),ddmmyy8.);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2004-8-25 09:43:07 | 只看该作者

一个相关的问题

日期的格式是"12/31/2000",可后来不知道怎么回事变成了"36891"。我尝试用YEAR函数,可是提出来的不是2000年。我看SAS的Manual,好像日期的格式应该是"31/12/2000"才可以用YEAR函数。不知道我这种情况该如何做,我要分别提出年月日。谢谢大家。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2004-8-25 12:00:06 | 只看该作者

re

sas存贮的日期值是和1960年1月1日的差值。
36891的year应该是2061年。用year函数时并没要求时间值的格式。

试试这个,你就明白了。
data tmp;
input date1;
format date1 mmddyy10.;
informat date1 mmddyy10.;
cards;
12/31/2000
;
run;

data tmp;
set tmp;
year1=year(date1);
month1=month(date1);
day1=day(date1);

date2=date1;
year2=year(date2);
month2=month(date2);
day2=day(date2);
run;
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-10 23:26 , Processed in 0.302884 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表