%letでの記載,私も苦手ですが,もし単語が入っても大丈夫なようにtranwrdを使いたいってことであれば今回のケースだと
%let out = x_2023;
%let tout2 = %sysfunc(tranwrd(&out,_,));
でいけると思いますが(※置換文字列が0レングスの場合,半角スペース一つにするというtranwrdの働きで)
クォーティングからむ文字が対象のこともあるかもなので,以下とかの方が安全ですかね
%let out = x_2023;
%let tout2 = %sysfunc(tranwrd(&out,%str(_),%str( )) );