在 WHEN-DO 语句 SAS 中创建一个变量

Create a variable inside WHEN-DO statement SAS

想要根据产品的值创建 2 个宏变量 "list" 和 "list2",但它总是 returns 最后一次迭代值。

谢谢

%let prod=WC;
SELECT ;

  WHEN (WC = &prod)
    DO; 
        %let list = (60 , 63 ); 
        %let list2= ("6A","6B","6C") ;
    END;

  WHEN (MT = &prod)
    DO;
        %let list = (33 , 34);
        %let list2= ("3A","3B");
    END;

OTHERWISE;

END;

RUN;
``

在数据步中使用 call symput:-

Call symput in SAS documentation

所以你的陈述将是这样的:-

call symput("list", "(60 , 63 )");

希望这对您有所帮助:-)

宏处理器在将生成的代码传递给 SAS 进行解释之前工作。所以你的代码是按这个顺序计算的:

%let prod=WC;
%let list = (60 , 63 ); 
%let list2= ("6A","6B","6C") ;
%let list = (33 , 34);
%let list2= ("3A","3B");
data ...
SELECT ;
  WHEN (WC = &prod) DO; 
  END;
  WHEN (MT = &prod) DO;
  END;
  OTHERWISE;
END;
...
RUN;

要从 运行 数据步骤设置宏变量,请使用 CALL SYMPUTX() 函数。您是否真的在尝试将变量 WC 与变量 MT 进行比较?您的数据步骤中的数据是否有这些变量?或者您想将文本 WC 与文本 MT 进行比较?

when ("WC" = "&prod") do;
  call symputx('list','(60,63)');
  call symputx('list2','("6A","6B","6C")') ;
end;