2017-03-19 23 views
0

我是SAS新手,所以如果这个问题太简单,我很抱歉。我尝试了很多关于这方面的研究,但我不清楚如何继续。使用全局宏变量初始化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; 

相信的问题之一是,不像%的人,“我”是不是一个宏观变量。我已经尝试猫(var,i)上的变体,但它没有所需的行为,因为我想要& var &我来解决。 有没有办法在DATA步骤中完成这项工作?

回答

3

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

谢谢@Reeza。你能教我一下为什么这不是一个好主意吗?什么是更好的方法? – Lepidopterist

+1

symgetN - X应该是数字右键 –

+0

谢谢@data_null_,我做了更改。 – Reeza