Automatic macro-variables seem to provide either a too simple or a too complex version number:
AUTOMATIC SYSVER 9.4
AUTOMATIC SYSVLONG 9.04.01M8P011823
AUTOMATIC SYSVLONG4 9.04.01M8P01182023
Can we assume that the maintenance version (such as TS1M8) can always be derived from &sysvlong, and if yes what would be a reliable way of doing it ?
For any 9.4 version, yes.
And if you migrate to Viya 4, this wil be the format:
V.04.00M0P083123
Retrieve it from SYSVLONG, SCAN after the second dot and before the first "P":
want = scan(scan("&sysvlong.",2,"."),1,"P");
For any 9.4 version, yes.
And if you migrate to Viya 4, this wil be the format:
V.04.00M0P083123
I ended up with:
%if &sysver=9.4 %then %do; %let software_version = SAS &sysver (TS%sysfunc(prxchange(s/^0*//, 1, %qscan(%qscan(&sysvlong,3,.),1,P)))); %end; %else %do; %let software_version = SAS &sysvlong; %end; %put &=software_version;
which results in:
SOFTWARE_VERSION=SAS 9.4 (TS1M8)
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
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.