Hi,
I'm having trouble keeping a date format when concatenating to a char.
i want to attach a char variable to yesterday's date, for example:
abc_20180416.
here is the code I made:
data temp0;
yest =today() -1; format yest yymmddn8.;
var1='abc_';
var2= cat(var1,yest);
run;
proc print data=temp0 (keep=yest var2);
run;
The result is:
yest var2
20180416 abc_21290;
I've tried a few different things, but can't seem to pin down how to get var2= abc_20180416.
Any tips out there?
Thanks
Here's the statement that creates VAR2:
var2= cat(var1,yest);
Try it this way instead:
var2= cat(var1,put(yest, yymmddn8.));
Here's the statement that creates VAR2:
var2= cat(var1,yest);
Try it this way instead:
var2= cat(var1,put(yest, yymmddn8.));
it works. thank you very much for your help here!
The crux behind this:
data temp0;
format yest yymmddn8.;
yest = today() - 1;
var1 = 'abc_';
var2 = cat(var1,yest);
run;
is that yest is a numeric variable, while cat() is a string function; so you force SAS to do an automatic conversion from numeric to character, and in such automatic conversions, no formats are applied, and you get the raw value (days from 1960-01-01 to yesterday) appended.
@Astounding's solution prevents this.
Hint: never allow automatic type conversions in your programs (you'll find them by the NOTEs they cause). See my Maxims 31 & 25. Take control.
Thank you, Kurt. These maxims are great! Good reading I'll take up later on. Thanks again for your direction.
Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!
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.
Ready to level-up your skills? Choose your own adventure.