通过递增使用全局宏变量初始化 SAS 数据集

Initializing a SAS DATA set with global macro variables by incrementing

我是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 来解析。 有没有办法在数据步骤中完成这项工作?

我无法想象这样做实际上是个好主意的情况,不过,这里有一个答案。您不能使用标准宏变量 &&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;