1.Array array-name{dimension} <elements>
array-name:向量名称
dimension:向量长度,默认为1;
elements:列出变量名,变量名要么全是数值变量或者全是字符变量
array-name和variable不能相同;也不能和函数名称相同;
array的名称不可以在label、format、drop和keep或者length语句中使用。
dimension可以取数值、数值范围或者*
array sales{4} qtr1 qtr2 qtr3 qtr4
array sales{96:99} qtr1-qtr4
array sales{*} qtr1 qtr2 qtr3 qtr4
变量名取值可以变量名、也可以是“-”连接的变量名序列,也可以是_ALL_(所有变量),_NUMERIC_(所有数值变量),_CHARACTER_(所有字符变量)
如:array sales{*} _numeric_;
当读取一行数据放入PDV里面(程序向量),在这行数据里面对array里面的变量值循环做相同的处理。
2.ARRAY 函数
dim(array-name):计算向量里面的变量个数
3.使用ARRAY 创建新变量
array array-name{dimension} <variablename> )
创建新变量,未自定义变量名,变量名默认为array-name后接1,2,.....dimension ;
后接 $ 表示字符型,默认长度为8,可以加上数值表示字符的长度
比如:array firstname{5} $ 24;
举例如下:
也可以自定义variable-name;
给新建的变量赋初值:
array array-name {dimension} <variable name> (initial values)
在变量名之后赋初值,初值和变量名一一对应,初值间用空格或逗号隔开,初值用括号括起来;
在向量里面赋值的初值在PDV中会自动从第一行开始予以保留,不清空
如:array goal{4} g1 g2 g3 g4 (9000,9300,9600,9900)
array col{3} $ color-color3 (“red”,"green","blue")
也可以不设置变量名为向量里面的每个元素赋值
array var{4} (1 2 3 4),
举例如下:
结果如下:
如上在ARRAY中定义的变量,会输出至SAS数据集,因此可以用_TEMPORARY_来创建临时变量,临时变量不会出现在SAS数据集中:
4.使用ARRAY创建多维向量
上述均是用ARRAY创建的一维向量,创建二维向量如下:
array new{3,4} x1-x12; {r,c}: r表示row,c表示column;
可以使用new(2,3)来引用向量里面的值;
向量如下:
举例如下:
在每次迭代开始给qtr{i}赋值为0,是为了避免上一个qtr值累积到下一个qtr值;
上述程序执行逻辑如下:
1)SAS在PDV中先根据ARRAY 组织或创建新变量如下:
2)当第一个DO循环i=1时,qtr{1}=0;面对第二个DO循环时,qrt{1}+m{1,1}:
qrt{1}+m{1,2}:
qtr{1}+m{1,3}:
3)结束循环时,PDV如下:
最终结果如下:
4)还可以实现数据转置,横向数据转成纵向数据举例如下:
源数据:
转置后数据