在 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;
想要根据产品的值创建 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;