So I ran this little piece of code under SAS9.4 M0 and also under M3 and get a different name for the colpctsum variable!
proc tabulate data=sashelp.cars out=fred;
Under M0 the var name is: Horsepower_PctSum_0
Under M3 the var name is: Horsepower_PctSum_0_Horsepower
This is very unfortunate and is causing us a lot of grief!
Is there anything in the release notes that refers to this new behaviour?
Here's a SAS note that describes the change. It was intentional -- to help with name collisions. But unfortunately it broke your process.
More documentation/explanation in this Usage Note 45710: Naming convention for statistics in an output data set created by PROC TAB....
Here is a brute-force SAS macro program -- which I dug out of a Tech Support track and which you should definitely test before using in production -- that renames the variables back to the old style, trimming the underscore-number suffix.
%macro myrename(dsn=&syslast); %let lib=%scan(&syslast,1,%str(.)); %let mem=%scan(&syslast,2,%str(.)); proc sql noprint; /* generate a command line : RENAME oldname=newname */ select catt('rename',' '!!name,'=',substr(name,1,length(name)-index(reverse(trim(name)),'_'))) into:renamelist separated by ";" from sashelp.vcolumn where libname=upcase("&lib.") and memname=upcase("&mem.") and (lowcase(name) like '%_pctsum_%' OR lowcase(name) like '%_pctn_%' ); /* execute this command in proc datasets */ proc datasets lib=&lib nolist; modify &mem; &renamelist; run;quit; %mend myrename; %myrename;
Find more tutorials on the SAS Users YouTube channel.