如何使用 SAS 对所有时间进行舍入?

问题描述 投票:0回答:3

我有一个小问题,如果有人能帮助我,我将不胜感激。

我想做的基本上是将时间部分四舍五入到最接近的 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;

但是我想对所有时间进行四舍五入,而不是五个。我正在使用大数据。

感谢您的关注。

time sas rounding
3个回答
1
投票

假设您询问如何对其他数据进行舍入,而不仅仅是上面示例中的数据行,我建议您将这两个任务分成两个不同的数据步骤。

首先创建示例数据(稍后可以将其交换为主要数据)

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;

希望这是您问题的答案。


0
投票
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;

0
投票

上面的代码只是向上舍入,但如果你希望它根据实际秒数舍入,那么你可以使用它。

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;
© www.soinside.com 2019 - 2024. All rights reserved.