通过递增使用全局宏变量初始化 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;
我是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;