SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1899|回复: 11
打印 上一主题 下一主题

如何把一列格式是21AUG1996:00:00:00的数据编程1996-08-21?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2006-4-6 23:26:04 | 只看该作者

如何把一列格式是21AUG1996:00:00:00的数据编程1996-08-21?

我搜索过之前曾经提出的问题,但是没有与我这个有关联的。
我想请问的是:我有一列数据,变量为dt,它的格式就是诸如21AUG1996:00:00:00
现在我想把它变成诸如1996-08-21这样的格式,应该如何编程呢?
要注意的是,我现在是希望把整个数据集中的dt中的数据都变成诸如1996-08-21
这种格式,而不只是一个数据,是整列,请问应该怎么做呢?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2006-4-7 00:38:59 | 只看该作者

to sasfans

[code:a309c]
data sas;
input date datetime19.;
cards;
21AUG1996:00:00:00
;
run;

data sas1;
format dt yymmdd10.;
set sas;
dt=date/86400;
run;
[/code:a309c]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2006-4-7 18:26:45 | 只看该作者

to maurice

首先,感谢你的答案。但是非常抱歉,你应该没有明白我的意思。我的意思是在原数据集中有一列数据,它的格式是21AUG1996:00:00:00,但不是每一个数据都是这个日期,我现在想要的是把整列数据都变成是1996-08-21这样的格式,而不是只是这个数据。
anyway,thank you all the same.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2006-4-7 20:44:30 | 只看该作者

不用学了吧.

呵呵,看来你不用再学SAS了,估计你也学不出来.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2006-4-8 23:55:40 | 只看该作者

to ahuige

为什么觉得我会学不出来呢?我承认我刚刚开始学,有许多东西不明白。但是我很认真。对于这个问题,我是自己查了书,上机试过好多次,然后才发上论坛问的,而在论坛里,根本没有答案。
以前的问题一般都是问如何改变格式的,但是我要问的不是一两个数据的格式改变,而是整列数据的改变,我试过format结果显示error,因为没有$yymmdd.这样的格式,我就是不明白为什么我写的格式是yymmdd.它却显示$yymmdd.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2006-4-9 11:30:40 | 只看该作者

请教

我倒要请教一下,你所谓的对一列的处理应该如何进行?
楼上写的程序,为何又不是对一列进行?
只有一个观测的列叫不叫列?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2006-4-9 23:26:49 | 只看该作者

to sasfans

先说明一下,我写的程序确实可以使一列进行格式变换,即从21AUG1996:00:00:00格式(SAS中称作datetime19.)转化成1996-08-21格式(SAS中称作yymmdd10.)。只不过我给这列(变量)只输入了一个观测。

    第一个data步是将21AUG1996:00:00:00(也可以是很多的观测)存入SAS dataset,但是存储的格式会是数值型的。你可以自己打开看看变量属性。这个数值其实是,1996年8月21日00:00:00减去1960年1月1日00:00:00后,再核算成秒,得到的数值。第二个data步程序是把这个数值先换算成天,也就是除以(24*60*60=86400),然后在以yymmdd10.的格式存储起来。你仔细看看dt变量和date变量的format就明白了。

    ahuige是个直爽的人,说话可能会比较急。说实话,我也是个初级,以前也问过很多弱智问题。这其实没什么。不过我倒是认为,自己还应该多研究研究SAS的帮助,还有document(SAS官方网站上有很全的SAS9document)。再有一个就是如果一段程序没看懂,可以用SAS去试。这是我自己的一点点经验,和你分享一下。希望你今后也能成为SAS高手。

    再问一下,你使的是哪个版本?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2006-4-11 00:43:22 | 只看该作者

to sasfans

对于这个问题,maurice已经回答的非常非常详细了,十分感谢他!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2006-4-11 19:10:51 | 只看该作者

to maurice

你好,再次感谢你的回复。其实我现在正在处理一些数据,原来的数据是用txt格式保存的,我用快捷方式import把数据导入了SAS9中,现在的问题是,在dt这一列变量中,数据的表现形式是21AUG1996:00:00:00,我首先在attributes那里看一下,然后按下了format后边的一个按钮,准备选择格式,但发现的是在格式选择中,居然都带有$号,例如有$ascii $char $hex等等。然后我就查书,准备用程序把dt的格式变成yymmdd10.可是在日志中,它就显示error:没有$yymmdd10.这种格式。
于是我就在想:我觉得大家都认为21AUG1996:00:00:00是datetime19.这种格式,如果真的是这样,那么我在看dt变量的attributes中的format时,为什么它却说原来的格式是$呢?
其实这就是我最不明白的问题,就是当你拥有了数据,数据格式却是$,但我在查看数据时,它的表现形式却是21AUG1996:00:00:00时,那么我如何才能得到1996-08-21这样的格式?
我非常的抱歉再三发问,可是我也问了其他学SAS的老师,他们都说等他们想一想,于是我把这个问题发上论坛,希望各位能看一下能不能解决。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2006-4-11 23:18:55 | 只看该作者

给数据

把dataset数据发到ahuige@126.com,我来试试.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 06:17 , Processed in 0.072291 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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