I am trying to create a unique ID that is a combination of an ID variable and a date.
In both datasets I have an ID variable which is a numeric variable with a length of 8 and format Best12. In one dataset I have delivery_date which is length 8, format MMDDYY10. and informat date9. In the other I have new_delivery_date which has the same characteristics.
The code I am using is
ID2=put(ID, 8.);
del_date2=put(delivery_date, 9.);
Del_ID = strip(ID2)||strip(del_date2);
And
ID2=put(ID, 8.);
del_date2=put(new_del_date, 9.);
Del_ID = strip(ID2)||strip(del_date2);
Here is an example of the del_ID for one patient in both datasets. Do you have any idea why the Del_IDs would not match in the datasets if the variables are all formatted the same way?
Dataset1:
ID 1001958 Del_ID 100195819038 new_del_date 02/15/2012
Dataset 2:
ID 1001958 Del_ID 100195819039 new_del_date 02/15/2012
Why does one Del_ID end in 8 and the other in 9 if the dates are formated the same way?
SAS stores dates as the number of days. All numeric variables in SAS are floating point values. The date formats (like MMDDYY , DDMMYY, YYMMDD, DATE, etc) will only use the integer part of the value.
But 9. format you used to convert the number of days to an digit string will round instead.
Example:
1 data test;
2 today=today()+0.6;
3 put today= +1 today date9. +1 today 9. ;
4 run;
today=22196.6 08OCT2020 22197
If the goal is to make a string of digits that represents ID and DELIVERY_DATE then you should use leading zeros in the ID value to force it to always use the same number of digits. To represent dates in strings use Y-M-D order so that the strings will sort properly.
Like this:
length DEL_ID $16;
DEL_ID = put(id,Z8.) || put(delivery_date,yymmdd8.);
Available on demand!
Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.
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.