BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
Whitlea
Obsidian | Level 7

I need to create a point in time variable in sas 9.3 using today's date where the date format in my data is datetime20.

I would like "today" to eq today's date.

 

Data WORK.want;
set WORK.want;
If A_Date > today then pt=0;
If B_Date=" " then pt=1;
If B_Date < today then pt=0;
If A_Date < today and B_Date => today then pt=1;
else pt=0;
Run;

 

Thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
PaigeMiller
Diamond | Level 26

@Whitlea wrote:

I need to create a point in time variable in sas 9.3 using today's date where the date format in my data is datetime20.

I would like "today" to eq today's date.


You would like TODAY to be equal to today's date, but your data is in format datetime20. This is a problem. It won't work the way you describe it. You can't directly compare a date to a datetime value. Instead, you want TODAY to be a datetime variable, most likely equal to 24APR2023:00:00:00. You can use the DATETIME() function and now you are comparing datetimes to datetimes, that will work. So the code would look like:

 

Data WORK.want1;
    set WORK.want;
    today=datetime(); /* Now today is a datetime variable */
    if A_Date > today then pt=0;
    if B_Date=" " then pt=1; /* This won't work if b_date is a numeric datetime variable, are you sure it is a numeric datetime variable? */
    If B_Date < today then pt=0;
    If A_Date < today and B_Date => today then pt=1;
    else pt=0;
run;

 


As an alternative, you can do this which will compare dates to dates (using the DATEPART function to turn datetimes into dates):

 

Data WORK.want1;
    set WORK.want;
    today=today(); /* Now today is a date variable */
    /* You can't directly compare a datetime variable like A_DATE to a DATE Variable */
    /* But the datepart function turns a datetime variable into a date variable which can be compared to a date variable */
    If datepart(A_Date) > today then pt=0;
    If datepart(B_Date)=" " then pt=1; /* This won't work if b_date is a numeric datetime variable, are you sure it is a numeric datetime variable? */
    If datepart(B_Date) < today then pt=0;
    If datepart(A_Date) < today and datepart(B_Date) => today then pt=1;
    else pt=0;
run;

  

--
Paige Miller

View solution in original post

3 REPLIES 3
PaigeMiller
Diamond | Level 26

@Whitlea wrote:

I need to create a point in time variable in sas 9.3 using today's date where the date format in my data is datetime20.

I would like "today" to eq today's date.


You would like TODAY to be equal to today's date, but your data is in format datetime20. This is a problem. It won't work the way you describe it. You can't directly compare a date to a datetime value. Instead, you want TODAY to be a datetime variable, most likely equal to 24APR2023:00:00:00. You can use the DATETIME() function and now you are comparing datetimes to datetimes, that will work. So the code would look like:

 

Data WORK.want1;
    set WORK.want;
    today=datetime(); /* Now today is a datetime variable */
    if A_Date > today then pt=0;
    if B_Date=" " then pt=1; /* This won't work if b_date is a numeric datetime variable, are you sure it is a numeric datetime variable? */
    If B_Date < today then pt=0;
    If A_Date < today and B_Date => today then pt=1;
    else pt=0;
run;

 


As an alternative, you can do this which will compare dates to dates (using the DATEPART function to turn datetimes into dates):

 

Data WORK.want1;
    set WORK.want;
    today=today(); /* Now today is a date variable */
    /* You can't directly compare a datetime variable like A_DATE to a DATE Variable */
    /* But the datepart function turns a datetime variable into a date variable which can be compared to a date variable */
    If datepart(A_Date) > today then pt=0;
    If datepart(B_Date)=" " then pt=1; /* This won't work if b_date is a numeric datetime variable, are you sure it is a numeric datetime variable? */
    If datepart(B_Date) < today then pt=0;
    If datepart(A_Date) < today and datepart(B_Date) => today then pt=1;
    else pt=0;
run;

  

--
Paige Miller
Whitlea
Obsidian | Level 7

Thank you!

How would I do this if B_Date was in format datetime20. as well? 

PaigeMiller
Diamond | Level 26

@Whitlea wrote:

Thank you!

How would I do this if B_Date was in format datetime20. as well? 


You would use

 

if b_date=. then ... ;

 

 

since a numeric variable missing value is indicated by a dot and not by " "

--
Paige Miller

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

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
  • 3 replies
  • 503 views
  • 0 likes
  • 2 in conversation