BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
WorkingMan
Calcite | Level 5

I have a data where it has individual column for:

Day, Month, Year, and time.

For time, the source data is 0900 for 9 o clock and weirdly, they have 10000 value.

When formatting that, it can be converted into 10:00. But when i convert it into datetime, it gave warning:

NOTE: Invalid argument to function INPUT at line 45 column 16.
year=2014 month=January transformer=T1 Day=Wednesday Date=1 Time=10:00:00  numMonth=1 sasdate=01JAN2014 newdatetime=. _ERROR_=1 _N_=39

 

Here are my codes:

data converttodate;
        set finaltestone;
            if month = 'January' then numMonth = 1;
            if month = 'February' then numMonth = 2;
            if month = 'March' then numMonth = 3;
            if month = 'April' then numMonth = 4;
            if month = 'May' then numMonth = 5;
            if month = 'June' then numMonth = 6;
            if month = 'July' then numMonth = 7;
            if month = 'August' then numMonth = 8;
            if month = 'September' then numMonth = 9;
            if month = 'October' then numMonth = 10;
            if month = 'November' then numMonth = 11;
            if month = 'December' then numMonth = 12;
            sasdate=mdy(numMonth,date,year);
              format sasdate date9.;
/*            preptime = substr(time,1,4);*/
            format time time.;
            attrib newdatetime format=datetime19.;
            newdatetime=input(put(sasdate,date9.)||put(time,time.),datetime.);
        run;    

 

 

Weirdly, the when the time is 10:00, it will never be able to produce datetime and hence prompting warning in the log for newdatetime.

 

Does anyone know what could be the cause of it?

1 ACCEPTED SOLUTION

Accepted Solutions
Kurt_Bremser
Super User

Use an informat for the month conversion, and your code will become much cleaner:

data have;
input year month :$10. date time :time8.;
format time time8.;
cards;
2014 January 1 10:00:00
;
run;

proc format;
invalue inmonth
  'January' = 1
  'February' = 2
  'March' = 3
  'April' = 4
  'May' = 5
  'June' = 6
  'July' = 7
  'August' = 8
  'September' = 9
  'October' = 10
  'November' = 11
  'December' = 12
;
run;

data want;
set have;
format newdatetime datetime19.;
newdate = mdy(input(month,inmonth.),date,year);
newdatetime = dhms(newdate,0,0,time);
drop newdate;
run;

View solution in original post

4 REPLIES 4
s_lassen
Meteorite | Level 14

To do the conversion with the datetime informat, you need a colon between the date and the time, e.g.:

newdatetime=input(put(sasdate,date9.)||':'||put(time,time.),datetime.);

or you can use the dhms function:

newdatetime=dhms(sasdate,hour(time),minute(time),second(time));

Date values are the number of days since 01JAN1960. Datetimes are the number of seconds since 01JAN1960:00:00:00. So another possibility is to turn the number of days into seconds and add it to the time:

newdatetime=sasdate*24*60*60+time;
Kurt_Bremser
Super User

Use an informat for the month conversion, and your code will become much cleaner:

data have;
input year month :$10. date time :time8.;
format time time8.;
cards;
2014 January 1 10:00:00
;
run;

proc format;
invalue inmonth
  'January' = 1
  'February' = 2
  'March' = 3
  'April' = 4
  'May' = 5
  'June' = 6
  'July' = 7
  'August' = 8
  'September' = 9
  'October' = 10
  'November' = 11
  'December' = 12
;
run;

data want;
set have;
format newdatetime datetime19.;
newdate = mdy(input(month,inmonth.),date,year);
newdatetime = dhms(newdate,0,0,time);
drop newdate;
run;
WorkingMan
Calcite | Level 5

After converting to newdatetime, i then tried to use it in a new data step but the datetime will never be displayed properly again.

 

Here is my code :

 

proc format;
invalue inmonth
  'January' = 1
  'February' = 2
  'March' = 3
  'April' = 4
  'May' = 5
  'June' = 6
  'July' = 7
  'August' = 8
  'September' = 9
  'October' = 10
  'November' = 11
  'December' = 12
;
run;

data converttodate;
		set finaltestone;
format newdatetime datetime19.;
newdate = mdy(input(month,inmonth.),date,year);
newdatetime = dhms(newdate,0,0,time);
drop newdate;
run;	
					
					
					
data work.finaltesthash;
set orifile;
  length excp_code $50;
  attrib station length=$10; 
attrib voltage length=$10; 
attrib year length=8;
attrib month length=$20;
attrib transformer length=$10;	
attrib newdatetime length=8 format=datetime19.;
run;

 

all data under newdatetime became . in work.finaltesthash. It was displaying properly in work.converttodate.

 

Anyone can help me with this?

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 1162 views
  • 2 likes
  • 3 in conversation