Sas 更改宏变量字符值

Sas 更改宏变量字符值,sas,sas-macro,Sas,Sas Macro,我有以下宏变量: %LET TEST= A1 A2 A3 A4 A5; 我最初的目标是为每个字符添加前缀,其中包括: 测试1=LG_A1 LG_A2 LG_A3 LG_A4 LG_A5 我尝试通过以下方式使用tranwrd函数来实现这一点: %Let TEST1= %SYSFUNC(TRANWRD(&TEST, "A", "LG_A")); 或 但两种方法都无法得到结果 有没有办法使用其他方法或tranwrd函数来获得所需的结果?一种方法是循环遍历所有单词,并为每个单词添加前缀 %L

我有以下宏变量:

%LET TEST= A1 A2 A3 A4 A5;
我最初的目标是为每个字符添加前缀,其中包括:

测试1=LG_A1 LG_A2 LG_A3 LG_A4 LG_A5

我尝试通过以下方式使用tranwrd函数来实现这一点:

%Let TEST1= %SYSFUNC(TRANWRD(&TEST, "A", "LG_A"));

但两种方法都无法得到结果


有没有办法使用其他方法或tranwrd函数来获得所需的结果?

一种方法是循环遍历所有单词,并为每个单词添加前缀

%LET TEST= A1 A2 A3 A4 A5;

%macro add_prefix();
    %global TEST1;
    %let TEST1 =;

    %do i = 1 %to %sysfunc(countw(&TEST));
        %let TEST1 = &TEST1 LG_%scan(&test,&i);
    %end;
%mend;
%add_prefix();
%put &TEST1;
刚才注意到,您也可以删除符号以获得相同的结果。但既然你已经试过了,但没有得到正确的结果,我就不知所措了

%Let TEST1= %sysfunc(TRANWRD(&TEST, A, LG_A));

您第二次尝试不使用引号对我来说很好,您在其他地方有一个不同的错误。使用正则表达式很方便。%设test1=%sysfuncprxchanges/\w{2}/LG_$1/,-1,&test;
%Let TEST1= %sysfunc(TRANWRD(&TEST, A, LG_A));