ARRAY产生循环变量值

利用ARRAY产生循环变量值:

options pageno=1 nodate ps=64 ls=80;
data temp;
input x @@;
cards;
10 20 30
;
run;
data test(drop=i);
   set temp;
   array a(5) A1-A5;
   do i=1 to 5;
      a(i)= i;
   end;
run;
proc print noobs data=test;
run;



结果显示为:

ARRAY产生循环变量值_第1张图片

程序解读:
首先我们产生了一个测试数据集temp。对主体程序DATA步,PDV流程如下:
【1】系统首先编译,产生一条PDV,PDV包含的变量有X;A1-A5共6个变量,并置所有变量初始值为0。
【2】接下来系统执行SET语句,读数据集temp第一条观测,由于ARRAY语句是声明语句,程序不会执行,直接跳过,执行下面的DO循环语句,从这个简单的DO循环语句可以看出,程序在该循环上一共执行了5此循环(i=1 to 5),每执行一次循环,都会把对应的i值赋给对应的数组变量(如A(1)=1表示把值1赋给数组变量A(1),前面说到,数组语句其实是一个变量指针,所以A(1)其实对应的真正变量应该是A1.故A1=1。依次类推到A2-A5)。
【3】接下来系统执行RUN语句,输出PDV对应的变量值,并充值所有的PDV变量值为缺失。
【4】程序再次 跳回DATA步开头,读数据集temp第二条观测,依次下去,直到执行完所有三条观测。


程序总结:从上面的分析可以看出,ARRAY语句其实是一个横向操作语句。也就是说,当数据指针停留在某一条观测的时候,可以通过ARRAY语句,把所有的ARRAY声明的变量都操作一遍。因此,本质上ARRAY语句是一个多变量操作的简化语句,但是一旦和DO循环语句结合,会产生更强大的实现功能。

你可能感兴趣的:(array,sas,循环变量)