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

Dear all,

 

I have a table (SAS EG) with date values (type date) and Time values (type String), and want to create dateTime-values from that.

 

Date example:

 

00012_Begindatum deze episode00013_Begintijd deze episodeBeginTimeHours_NumericBeginDateTime
3-11-20169:489:489.
2-5-201410:4510:4510.
30-9-201414:3514:3514.
30-9-201415:0015:0015.
1-10-201417:2517:2517

.

 

I used the following expression to create the (SAS EG) "Calculated Field":

 

DHMS(t1.v00012,inputn(SUBSTR(t1.v00013, 1, 2),'2.'),inputn(SUBSTR(t1.v00013, 3, 2),'2.'),0 )

 

but get "missing values". The Log file shows this:

 

24 PROC SQL;
25 CREATE TABLE WORK.'Argus with duration'n AS
26 SELECT t1.v00012,
27 t1.v00013,
28 /* BeginTime */
29 (input(t1.v00013,time5.)) FORMAT=HHMM5. LABEL="BeginTime" AS BeginTime,
30 /* Hours_Numeric */
31 (INPUTN(SUBSTR(t1.v00013, 1, 2),'2.')) AS Hours_Numeric,
32 /* BeginDateTime */
33 (DHMS(t1.v00012,inputn(SUBSTR(t1.v00013, 1, 2),'2.'),inputn(SUBSTR(t1.v00013, 3, 2),'2.'),0 ))
34 FORMAT=DATETIME13. LABEL="BeginDateTime" AS BeginDateTime
35 FROM WORK.'ARGUS WITH ADMISSION INFO'n t1;
NOTE: Invalid argument 1 to function INPUTN. Missing values may be generated.
NOTE: Invalid (or missing) arguments to the DHMS function have caused the function to return a missing value.
NOTE: Invalid time value
NOTE: Invalid argument to function INPUT. Missing values may be generated.
NOTE: Table WORK.'ARGUS WITH DURATION'n created, with 7585 rows and 5 columns.

36 QUIT;

 

Remark: Inputn function works for the HOURS_NUMERICvariable, and copied into the DHMS-funtion it raises these warnings.

 

Question: what do I do wrong?

 

Any help will be appreciated,

 

Regards, Hans Troost

1 ACCEPTED SOLUTION

Accepted Solutions
RW9
Diamond | Level 26 RW9
Diamond | Level 26

This works;

data want;
  d="3-11-2016"; t="9:48"; 
  date_time=dhms(input(d,ddmmyy10.),hour(input(t,time5.)),minute(input(t,time5.)),0);
  format date_time datetime.;
run;

You only need the date_time row.  Of course, this assumes your data is right, if there are invalid values then it will fail as with any logic.

View solution in original post

4 REPLIES 4
RW9
Diamond | Level 26 RW9
Diamond | Level 26

This works;

data want;
  d="3-11-2016"; t="9:48"; 
  date_time=dhms(input(d,ddmmyy10.),hour(input(t,time5.)),minute(input(t,time5.)),0);
  format date_time datetime.;
run;

You only need the date_time row.  Of course, this assumes your data is right, if there are invalid values then it will fail as with any logic.

HansTroost
Calcite | Level 5
Thanks RW9. Works fine for me. Hans
Shmuel
Garnet | Level 18

v00013 is probably a numeric time variable, so it is wrong to use INPUT function.

You can define:

  hh = hour(v00013);  mm = minute(v00013);  ss = second(v00013);

then:

  DateTime = dhms(v00012,hh,mm,ss);

HansTroost
Calcite | Level 5

Thanks Shmuel for your fast reply.

 

The TIME value is a string and not numeric. So I tried RW9's solution and that works fine for me.

 

Regards, Hans

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 4 replies
  • 1648 views
  • 0 likes
  • 3 in conversation