BookmarkSubscribeRSS Feed
knveraraju91
Barite | Level 11

Dear,

 

I am using the following format. I am not getting the output for the data values. Please help. Thank you

 

proc format;
picture fmt(default=10)
other='%n %0H:%0M'(datatype=time);
run;

 

code;

value=strip(put((AEDATE-TRTDATE),fmt.));

 

data

 

 aedate                                            trtdate

29JUL15:15:00                       28JUL15:08:45

 

output getting;

1 30:15

 

output need

1 06:15

12 REPLIES 12
ballardw
Super User

I suggest rechecking your values of the datetime variables. For your example data I get 06:15

 

Here is the code I used to assign values and test:

data junk;
    aedate = "29JUL15:15:00"dt;
    trtdate= "28JUL15:08:45"dt;
    format aedate trtdate datetime20.;
    value=strip(put((AEDATE-TRTDATE),fmt.));
run;
rogerjdeangelis
Barite | Level 11
I get the result you want

proc format;
picture fmt(default=10)
other='%n %0H:%0M'(datatype=time);
run;

data have;
 aedate = '29JUL15:15:00'dt;
trtdate = '28JUL15:08:45'dt;
dur=AEDATE-TRTDATE;
durc=put(dur,fmt12.);
put durc;
run;quit;

1 06:15
knveraraju91
Barite | Level 11

Thanks for the help. You are right.

 

when I run your code in sas on my desk top , I got the what you got.

 

But when I run in sas on my remote desk top, i am getting 1 30:15. 

 

Do you any suggestions. Thanks

 

 

proc format;
picture fmt(default=10)
other='%n %0H:%0M'(datatype=time);
run;

data have;
aedate = '29JUL15:15:00'dt;
trtdate = '28JUL15:08:45'dt;
dur=AEDATE-TRTDATE;
durc=put(dur,fmt12.);
put durc;
run;

Reeza
Super User

Report this to SAS Tech Support. But I do remember a vague idea of a bug with SAS Studio and creating formats.

rogerjdeangelis
Barite | Level 11

 

I get the result you want

proc format;
picture fmt(default=10)
other='%n %0H:%0M'(datatype=time);
run;

data have;
 aedate = '29JUL15:15:00'dt;
trtdate = '28JUL15:08:45'dt;
dur=AEDATE-TRTDATE;
durc=put(dur,fmt12.);
put durc;
run;quit;

1 06:15

 

Shmuel
Garnet | Level 18

When I use format line:

   other='%n %0H:%0M'(datatype=time);

I get ERROR message: 

  ERROR: An unknown, abnormal error has occured etc.

 

I changed into:

   other='%n %0H:%0M'(datatype=datetime);

then it is running without error but I get

   result = 0 06:01

 

Then I changed the line into:

   other='%d %0H:%0M'(datatype=datetime);

and i get : result = 2  06:01

 

though when I code

       diff = '29JUL15:15:00'dt - '28JUL15:08:45'dt;

       put diff= time7. ;

the result is 30:15  which is actually 1 06:15 

 

I have used same data values as posted, that is: 29JUL15:15:00     28JUL15:08:45

 

I admit that I could not solve it, using SAS UE on linux.

Reeza
Super User

@Shmuel There were no errors on BASE SAS. I wonder if it's an artifact. If I use type = datetime the incorrect values are generated. 

 

PS. I would recommend the word day or something in that format, its not obviously clear how to read that value at all. 

 

proc format;
picture myfmt(default=20)
other='%n Day %0H:%0M'(datatype=time);
run;
ballardw
Super User

@Shmuel wrote:

When I use format line:

   other='%n %0H:%0M'(datatype=time);

I get ERROR message: 

  ERROR: An unknown, abnormal error has occured etc.

 


@Shmuel Sometimes I get artifacts in code copied from the forum that causes similar errors. Sometimes when editing those lines I will attempt to delete a character but it is still there indicating possibly a bad unicode or other character translation to the editor. I did not get any error from the shown format code though.

Shmuel
Garnet | Level 18

@ballardw@Reeza - as I wrote I'm using SAS UE on linux in my laptop.

I use a PC with windows for the forum, so I don't use copy/paste.

In that specific case I typed data and code, and changing just "time" to "datetime" 

prevented the error.

 

Restarting my SAS session didn't help;

I'll check it again some day later.

 

Thanks, again.

Reeza
Super User

The correct answers are either:

 

1 06:15 or 30:15

ie 30 hours and 15 minutes of wait time to treatment - that's horrid by the way.

 

I think you may be misreading the 30:15 somehow? Slight modification of Roger's answer to show both values.

 

data junk;
    aedate = "29JUL15:15:00"dt;
    trtdate= "28JUL15:08:45"dt;
    format aedate trtdate datetime20. diff myfmt. diff2 time8.;
    diff=AEDATE-TRTDATE;
    diff2=aedate-trtdate;
    diff_char=put(diff, myfmt.);
run;

proc print data=junk NOOBS;
var diff:;
run;

 

 

Ksharp
Super User
According documentation said, %n can't be used in all the encoding sas session.
e.g. if you are using University Edition ,you will get wrong result due to its utf-8 encoding.
So try other ways.

knveraraju91
Barite | Level 11

Thank you very much

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
  • 12 replies
  • 1236 views
  • 1 like
  • 6 in conversation