繁体   English   中英

如何在循环SAS中的数据步骤中为宏分配值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM