谁能建议适当的 SAS 信息以读取日期时间(dd/mm/yyyy hh:mm)???
例如
data _null_;
informat from_dt datetime????.;
input from_dt ;
put from_dt=;
cards;
01/01/1960 00:00
;run;
通常,anydt* 系列信息确实有效。
data _null_;
from_dt = input("01/01/1960 00:00", anydtdtm.);
put from_dt= :datetime20.;
run;
/* on log
from_dt=01JAN1960:00:00:00
*/
我不认为特定信息是内置的,但你自己滚动相对容易。下面是创建自定义日期时间信息(这需要 cntlin 数据集)和自定义格式(使用图片语句)的示例,该格式读取您的特定日期时间,然后将其格式化为与输入相同。我通过假设时间部分始终是午夜 (00:00) 来简化它,但是如果您还需要跟踪时间部分,它可以很容易地扩展(只需将 86400 数字更改为 3600 以获取每小时和 60每分钟)。如果您打开 work.infmt 数据集以查看它的外观,这将有助于了解正在发生的事情。
/* Create a custom datetime format as Month/Day/Year<space>Hours:Minutes*/
proc format;
picture mydt other='%0m/%0d/%0Y %0H:%0M' (datatype=datetime);
run;
/* Create a custom informat using the format above */
data infmt ;
retain fmtname "dtwithspace" type "I" ;
do label = "1jan1960:00:00"dt to
"2jan2059:00:00"dt by 86400 ;
start = trim(left(put(label,mydt.)));
output ;
end ;
run ;
proc format cntlin = infmt ;
run ;
/* Now apply the informat and format to the data */
data _null_;
input from_dt $ 1-20;
format from_dt2 mydt.;
from_dt2=input(from_dt, dtwithspace.);
put from_dt2=;
cards;
01/01/1960 00:00
01/02/1999 00:00
;
run;
这给出了这样的输出:
278 data _null_;
279 input from_dt $ 1-20;
280 format from_dt2 mydt.;
281 from_dt2=input(from_dt, dtwithspace.);
282 put from_dt2=;
283 cards;
from_dt2=01/01/1960 00:00
from_dt2=01/02/1999 00:00
SAS 可能不支持您的数据所在的特定日期时间格式。您可以尝试将传入数据转换为更友好的格式,也可以使用substr、DHMS 和 MDY函数解析日期时间:
data test;
format dtstr $16. dt datetime22.4;
dtstr='01/01/1960 00:00';
day=substr(dtstr,1,2);
month=substr(dtstr,4,2);
year=substr(dtstr,7,4);
hour=substr(dtstr,11,2);
minute=substr(dtstr,15,2);
dt=DHMS(MDY(1*month,1*day,1*year),1*hour,1*minute,0);
output;
run;
或者,您可以将 datetime 字符串转换为 datetimew.d 格式并输入格式化的字符串:
data test;
format dtstr $16. dstr $8. tstr $5. indtstr $14. dt datetime22.4;
dtstr='01/01/1960 00:00';
dstr=put(input(substr(dtstr,1,10),mmddyy10.),date8.);
tstr=substr(dtstr,12);
indtstr=dstr!!':'!!tstr;
dt=input(indtstr,datetime14.0);
output;
run;
可以将转换压缩为单个但复杂的语句,因此为此创建宏可能是一个不错的决定。
SAS 知识库中的此条目包括用于解析和格式化日期时间的代码。看起来 SAS 有一个很棒的在线帮助系统。
此 Google 群组交流中的第三条消息也可能会有所帮助。它谈论输入日期时间,并提供代码。
你的问题很难解读,我对 SAS 知之甚少,这就是我所能提供的。希望能帮助到你。
按这里的列表,我认为没有。
可以想象,您可以使用 来创建自己的proc format
,但我认为这将非常困难。Ville Koskinen 的建议可能是您最好的选择。