Я думаю, что вы были бы в достаточной безопасности, выбирая несколько маловероятных имен. Простой способ создать их и сделать код несколько читабельным - просто набрать строку sh, чтобы создать допустимое имя SAS-переменной, и использовать ссылку на макрос, чтобы сделать код читабельным. Примерно так:
%macro get_low_collision_varname(iSeed=);
%local try cnt result;
%let cnt = 0;
%let result = ;
%do %while ("&result" eq "");
%let try = %sysfunc(md5(&iSeed&cnt),hex32.);
%if %sysfunc(anyalpha(%substr(&try,1,1))) gt 0 %then %do;
%let result = &try;
%end;
%let cnt = %eval(&cnt + 1);
%end;
&result
%mend;
Приведенный выше код берет начальную строку и просто добавляет число в конец. Он повторяет число до тех пор, пока не получит действительное имя SAS-переменной в качестве вывода из функции md5 (). Вы даже можете проверить имя целевого набора данных, чтобы убедиться, что переменная еще не существует. Если он встроит эту логику c в вышеуказанную функцию.
Протестируйте ее:
%let my_var = %get_low_collision_varname(iSeed=this shouldnt collide);
%put &my_var;
data _null_;
set sashelp.class;
&my_var = 1;
put _all_;
run;
Результаты:
Name=Alfred Sex=M Age=14 Height=69 Weight=112.5 C34FD80ED9E856160E59FCEBF37F00D2=1 _ERROR_=0 _N_=1
Name=Alice Sex=F Age=13 Height=56.5 Weight=84 C34FD80ED9E856160E59FCEBF37F00D2=1 _ERROR_=0 _N_=2
Это не отвечает конкретно на вопрос о том, как этого добиться, не создавая новые имена, но это дает практический обходной путь.