[英]How to assign a value to a macro in datastep in a loop SAS
所以我正在尝试做这样的事情:
data temp1;
set temp;
do i=1 to 10;
call symput("var1", i);
end;
array x(*) x_&var1 to x_&var10;
....................
run;
我正在尝试将i的值(1到10)分配给宏变量var1。 在同一数据步骤中,我将使用var1索引数组。
您可以将call symput
更改为此:
call symput(compress('var'||put(i,8.)), put(i,8.));
我还把put()
包裹在第二个参数上,以使用symput
来清除日志消息。
(不过,这看起来似乎很奇怪。如果您动态地创建许多宏变量,则可以重新考虑整体策略并提出更简单的方法。)
编辑 :内特(Nate)很好地了解了在同一数据symput
无法使用symput
创建的SAS变量。 如果仍然想使用此解决方案,则可以在“ temp1”步骤之前将symput
循环移到_null_
datastep中。
这里有几个问题。
一种是不能同时使用调用symput创建宏变量并在同一数据步骤中引用它,因此除非将其拆分为多个数据步骤,否则调用symput的任何变化都无法解决。
另一个是,在编写代码时(以及在描述中),您将要重写10次“ var1”……您不是要&var1吗? ,&var2。 ,...,&var10。 ? 如果是这样,我会建议类似:
call symput('var'||left(i),i);
最后,如果只需要这些宏变量用于数组声明,为什么还要在这里完全使用宏变量? 为什么不简单地将x_1写到x_10? 也许如果您向我们提供有关您要完成的目标的更多信息,我们可以为您提出更好的策略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.