所以我想尝试做这样的事情:
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。在同一个datastep中,我将使用var1来索引数组。
答案 0 :(得分:1)
您可以将call symput
更改为此:
call symput(compress('var'||put(i,8.)), put(i,8.));
我还在put()
的第二个参数周围打了一个symput
来清理日志消息。
(这看起来确实是一种奇怪的模式。如果你动态创建了很多宏变量,你可能会重新考虑你的整体策略并提出更简单的方法。)
编辑:Nate对使用symput
创建的SAS变量不能在同一个datastep中使用有一个很好的观点。如果您仍想使用此解决方案,可以在“temp1”步骤之前将symput
循环移动到_null_
datastep。
答案 1 :(得分:0)
这里有一些问题。
一个是您不能同时使用call symput创建一个宏变量并在同一个数据步骤中引用它,因此除非您将其拆分为多个数据步骤,否则调用symput的任何变化都无法解决。
另一个原因是,当您编写代码(并在您的描述中)时,您将重写“var1”10次...不要反而想要& var1。 ,& var2。 ,...,& var10。 ?如果是这样,我建议像:
call symput('var'||left(i),i);
最后,如果您只需要这些宏变量用于数组声明,为什么还需要在这里使用宏变量?为什么不简单地将x_1写入x_10?也许如果你给我们提供更多关于你想要实现的目标的信息,我们可以为你提供更好的策略。