SAS中文论坛

标题: 如何把一列格式是21AUG1996:00:00:00的数据编程1996-08-21? [打印本页]

作者: shiyiming    时间: 2006-4-6 23:26
标题: 如何把一列格式是21AUG1996:00:00:00的数据编程1996-08-21?
我搜索过之前曾经提出的问题,但是没有与我这个有关联的。
我想请问的是:我有一列数据,变量为dt,它的格式就是诸如21AUG1996:00:00:00
现在我想把它变成诸如1996-08-21这样的格式,应该如何编程呢?
要注意的是,我现在是希望把整个数据集中的dt中的数据都变成诸如1996-08-21
这种格式,而不只是一个数据,是整列,请问应该怎么做呢?
作者: shiyiming    时间: 2006-4-7 00:38
标题: 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]
作者: shiyiming    时间: 2006-4-7 18:26
标题: to maurice
首先,感谢你的答案。但是非常抱歉,你应该没有明白我的意思。我的意思是在原数据集中有一列数据,它的格式是21AUG1996:00:00:00,但不是每一个数据都是这个日期,我现在想要的是把整列数据都变成是1996-08-21这样的格式,而不是只是这个数据。
anyway,thank you all the same.
作者: shiyiming    时间: 2006-4-7 20:44
标题: 不用学了吧.
呵呵,看来你不用再学SAS了,估计你也学不出来.
作者: shiyiming    时间: 2006-4-8 23:55
标题: to ahuige
为什么觉得我会学不出来呢?我承认我刚刚开始学,有许多东西不明白。但是我很认真。对于这个问题,我是自己查了书,上机试过好多次,然后才发上论坛问的,而在论坛里,根本没有答案。
以前的问题一般都是问如何改变格式的,但是我要问的不是一两个数据的格式改变,而是整列数据的改变,我试过format结果显示error,因为没有$yymmdd.这样的格式,我就是不明白为什么我写的格式是yymmdd.它却显示$yymmdd.
作者: shiyiming    时间: 2006-4-9 11:30
标题: 请教
我倒要请教一下,你所谓的对一列的处理应该如何进行?
楼上写的程序,为何又不是对一列进行?
只有一个观测的列叫不叫列?
作者: shiyiming    时间: 2006-4-9 23:26
标题: 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高手。

    再问一下,你使的是哪个版本?
作者: shiyiming    时间: 2006-4-11 00:43
标题: to sasfans
对于这个问题,maurice已经回答的非常非常详细了,十分感谢他!
作者: shiyiming    时间: 2006-4-11 19:10
标题: 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的老师,他们都说等他们想一想,于是我把这个问题发上论坛,希望各位能看一下能不能解决。
作者: shiyiming    时间: 2006-4-11 23:18
标题: 给数据
把dataset数据发到ahuige@126.com,我来试试.
作者: shiyiming    时间: 2006-4-14 14:00
标题: 呵呵
数据已经收到,已经找到问题并解决.


你的数据是字符型的,当然不能用菜单变成日期式的了.日期式只能是数字.
所以要用函数来转换.
菜单中带$的类型是为了满足特殊要求的特殊字符型.当然不包括你的$YYMMDD9.了.

data ahuige;
  format dt date9.;
  set temp.dataset;
  strdt=substr(______DT,1,9);
  dt=input(strdt,date9.);
run;
作者: shiyiming    时间: 2006-4-14 20:03
标题: to ahuige
十分感谢!我明白了。




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2