利用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;

程序解读:
首先我们产生了一个测试数据集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循环语句结合,会产生更强大的实现功能。

2317

被折叠的 条评论
为什么被折叠?



