我有一个小问题,如果有人能帮助我,我将不胜感激。
我想做的基本上是将时间部分四舍五入到最接近的 30 分钟。
我的问题是如何使用 SAS 对数据进行舍入。
这是我的命令:
DATA sampledata;
INFORMAT TRD_EVENT_TM time10.;
FORMAT TRD_EVENT_TM TRD_TMR time14.;
INPUT TRD_EVENT_TM;
TRD_TMR = round(TRD_EVENT_TM, 1800);
INFILE;
00:14:12
00:16:12
09:01:23
09:46:32
15:59:45
;
PROC PRINT; RUN;
但是我想对所有时间进行四舍五入,而不是五个。我正在使用大数据。
感谢您的关注。
假设您询问如何对其他数据进行舍入,而不仅仅是上面示例中的数据行,我建议您将这两个任务分成两个不同的数据步骤。
首先创建示例数据(稍后可以将其交换为主要数据)
DATA sampledata;
infile datalines;
INPUT TRD_EVENT_TM hhmmss8.;
datalines;
00:14:12
00:16:12
09:01:23
09:46:32
15:59:45
;
RUN;
然后执行时间变量的舍入。
data test;
set sampledata;
format TRD_EVENT_TM TRD_TMR time.;
TRD_TMR = round(TRD_EVENT_TM, 1800);
run;
希望这是您问题的答案。
data Sampledata_RT;
set Sampledata04;
TRD_EVENT_ROUNDED = intnx('minute30',TRD_EVENT_TM,1,'b');
TRD_EVENT_ROUFOR = put(TRD_EVENT_ROUNDED,hhmm.);
CountedVOLUME = TRD_PR*TRD_TUROVR;
run;
上面的代码只是向上舍入,但如果你希望它根据实际秒数舍入,那么你可以使用它。
data sampledata;
format TRD_EVENT_TM rnd time8. ;
set initialdata;
/*this rounds time up if there are more than 30 seconds*/
if scan(vvalue(TRD_EVENT_TM),3,":")>=30 then
rnd= intnx('minute',TRD_EVENT_TM,1,'b');
/*drops the seconds if its less than 80*/
else rnd=intnx('minute',TRD_EVENT_TM,0,'b');
run;