【问题标题】:SAS Macro variable resolve issue in datastepSAS 宏变量解决数据步中的问题
【发布时间】:2020-03-31 15:14:11
【问题描述】:

有类似的命名宏变量,如 temp1、temp2 等。

temp1=xyz; temp2=abc;

现在我想将这些宏变量值存储到数据集中。

我试着写如下:

%let n=2;
data current_data;
do=1 to &n.;
myvalues="&&temp&i.";
run;

但它不起作用。 似乎 i 没有像 call symput 函数那样在声明的同一数据集中得到解析。

谁能帮忙?

【问题讨论】:

  • 你想要的结果是什么?你想观察每个宏变量吗?
  • 当初为什么要把数据放到宏变量中呢?很难看出如何在不从数据集开始的情况下获得一系列像这样的宏变量。为什么不直接使用原始数据集?
  • @Tom :这些是来自存储过程提示的输入。我为用户提供了输入多值文本的选项,因此他们输入了 n 个值,每个值都成为名称相似的宏变量,因此我需要读取这些值并将其放入数据集中。希望你现在清楚我的问题

标签: sas sas-macro


【解决方案1】:

要在运行时在数据步骤中动态检索宏变量的值,请使用 symget() 函数,与 call symputx() 函数相反。您可以使用cats() 帮助您根据整数值构建宏变量名称。

data current_data;
  do=1 to &n.;
    length myvalues $200;
    myvalues=symget(cats('temp',i));
    output;
  end;
run;

您可以使用宏逻辑来生成一些壁纸代码。请注意,您必须定义一个宏才能使用 %DO 循环。

%macro expand;
   data current_data;
     length i 8 myvalues $200;
  %do i=1 %to &n;
     i=&i;
     myvalues="&&temp&i";
     output;
  %end;
   run;
%mend expand;
%expand;

【讨论】:

  • 非常感谢!你做了 m 天 :)
猜你喜欢
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多