在SAS SQL中,可以使用Array和CALL语句来实现动态数组。
Array定义一个数组并将其初始化。CALL语句用于调用存储过程或自定义函数。
例如,以下示例定义了一个动态数组,使用CALL语句将其填充并将结果存储在另一个数组中:
proc sql;
/*定义原始数组*/
%let n=10;
%let arr=1 2 3 4 5 6 7 8 9 10;
/*定义结果数组*/
%let result=0 0 0 0 0 0 0 0 0 0;
/*定义动态数组*/
array arr[*] (&arr);
array result[*] (&result);
/*使用CALL语句填充结果数组*/
call execute('data _null_; set sashelp.class (keep=age); call symputx("age",age); rc=close("sashelp.class"); run;');
do i=1 to &n;
call execute('data _null_; set sashelp.class (keep=age); call symputx("age",age); rc=close("sashelp.class"); run;');
result[i]=&age;
end;
/*打印结果数组*/
put result[*];
quit;
上述示例中,首先定义了一个原始数组“arr”,将其存储在宏变量中。然后定义了一个结果数组“result”,将其初始化为0。然后定义了一个动态数组“arr”,使用CALL语句填充了结果数组“result”。在循环中,使用CALL语句从SASHELP.CLASS表中获取一个随机数,并将其存储在宏变量“age”中。然后age”赋值给结果数组“result”的第i个元素。
最后,使用PUT语句打印结果数组“result”。