通过递增

时间:2017-03-19 23:23:30

标签: sas sas-macro

我是SAS的新手,所以如果这个问题太简单,我会道歉。我已经尝试过广泛的搜索,但我不清楚如何继续。

我正在尝试使用与已存在的宏变量var1,...,varN相对应的功能初始化新的SAS数据集。为简单起见,假设N已在这些变量的生成过程中定义为宏变量。我想按照以下代码执行某些操作,但这不起作用:

%let var1 = 3;
%let var2 = 2.5;
%let var3 = 1;
[...]
%let varN = 2;


Data ABC;
  do i = 1 to &N;
    x = var&i.;
  end;
run;

我认为其中一个问题是,与%do不同," i"不是一个宏观变量。我在cat(var,i)上尝试了变种,但它没有所需的行为,因为我想要& var& i来解决。 有没有办法在DATA步骤中完成这项工作?

1 个答案:

答案 0 :(得分:3)

我无法想象这样做的情况实际上是一个好主意,然而,这是一个答案。你不能使用标准的宏变量&& var& i,因为那时你需要一个%DO循环。要将其保留在数据步骤中,请使用SYMGET。

%let var1=1;
%let var2=2;
%let var3=3;
%let N=3;

Data ABC;
    do i=1 to &N;
        x = symget(catt('var', i)); *character value;
        y = symgetN(catt('var', i)); *numeric value;
        output;
    end;
run;

proc print data=abc;
run;