Maxim 3: read the log. Your code contains several severe syntax errors (blank between time literal and the t, missing brackets, intx instead of intnx, missing arguments to intnx function).
Run this:
data table;
input opendate datetime22.;
format opendate datetime22.;
cards;
09aug2018:22:10:00
09aug2018:21:50:00
;
run;
data table_new;
set table;
if timepart(opendate) => '22:00't
then starttime = dhms(datepart(intnx('dtday',starttime,1)),8,0,0);
else starttime = opendate;
format starttime datetime20.;
run
Correction: The code needs to care for hours before 08:00, also:
data table_new;
set table;
if timepart(opendate) => '22:00't
then starttime = dhms(datepart(intnx('dtday',opendate,1)),8,0,0);
else starttime = max(opendate,dhms(datepart(intnx('dtday',opendate,0)),8,0,0));
format starttime datetime20.;
run;
@Gil_ wrote:
I have a data set that changes start time to 8 am if its after hours.
Data table;
Set table;
Starttime=opendate;
If timepart(starttime)=>^22:00' t then starttime=dhms(datepart(INTX'dtday', 1,),8,0,0) ;
Format starttime datetime20.;run;
I need the time to go from=> '22:00. Thru =<08:00 next morning.
Maxim 3: read the log. Your code contains several severe syntax errors (blank between time literal and the t, missing brackets, intx instead of intnx, missing arguments to intnx function).
Run this:
data table;
input opendate datetime22.;
format opendate datetime22.;
cards;
09aug2018:22:10:00
09aug2018:21:50:00
;
run;
data table_new;
set table;
if timepart(opendate) => '22:00't
then starttime = dhms(datepart(intnx('dtday',starttime,1)),8,0,0);
else starttime = opendate;
format starttime datetime20.;
run
Correction: The code needs to care for hours before 08:00, also:
data table_new;
set table;
if timepart(opendate) => '22:00't
then starttime = dhms(datepart(intnx('dtday',opendate,1)),8,0,0);
else starttime = max(opendate,dhms(datepart(intnx('dtday',opendate,0)),8,0,0));
format starttime datetime20.;
run;
@Gil_ wrote:
I have a data set that changes start time to 8 am if its after hours.
Data table;
Set table;
Starttime=opendate;
If timepart(starttime)=>^22:00' t then starttime=dhms(datepart(INTX'dtday', 1,),8,0,0) ;
Format starttime datetime20.;run;
I need the time to go from=> '22:00. Thru =<08:00 next morning.
If I understand right what you're after then below code should do the job.
data have;
infile datalines truncover;
input dttm datetime.;
format dttm datetime21.;
datalines;
08Aug2016 21:59:59
08Aug2016 22:00:00
08Aug2016 22:00:01
08Aug2016 23:59:59
09Aug2016 00:00:00
09Aug2016 00:00:01
09Aug2016 07:59:59
09Aug2016 08:00:00
09Aug2016 08:00:01
;
run;
data want;
set have;
format dttm_work datetime21.;
dttm_work=ifn(hour(intnx('dthour',dttm,2,'s'))<10,
intnx('dthour',intnx('dtday',intnx('dthour',dttm,2,'s'),0,'b'),8,'s'),
dttm
);
run;
proc print data=want;
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.