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;



结果显示为:

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

转载于:https://my.oschina.net/dataRunner/blog/609038

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值