Arrays SAS阵列在数据步长内执行循环计算
我有以下数据集:Arrays SAS阵列在数据步长内执行循环计算,arrays,sas,do-loops,Arrays,Sas,Do Loops,我有以下数据集: data have; input x10 x22 x13 x64; cards; 20 10 30 1 ; run; 我想创建四个名为log_x10,log_x22,log_x13,log_x64的新列,它们是原始列的日志。我知道这可能是一个相当简单的数组、循环过程,但我对数组相当陌生,不能完全理解语法。以下是我所拥有的: data want; set have; array var[*] x: ; do j=1 to dim(var);
data have;
input x10 x22 x13 x64;
cards;
20 10 30 1
;
run;
我想创建四个名为log_x10
,log_x22
,log_x13
,log_x64
的新列,它们是原始列的日志。我知道这可能是一个相当简单的数组、循环过程,但我对数组相当陌生,不能完全理解语法。以下是我所拥有的:
data want;
set have;
array var[*] x: ;
do j=1 to dim(var);
logx[j]=log(var[j]);
end;
run;
它并不总是四个变量,有时更少或更多。我将id号拉入宏列表id=(10,22,13,64)
,因此可以尝试使用类似的名称
想法?谢谢。我认为您需要在中确定数组的长度,以便声明结果数组。幸运的是,您可以使用短datastep将其加载到宏变量中
data have;
input x10 x22 x13 x64;
cards;
20 10 30 1
;
run;
data _null_;
set have (obs=1);
array vars[*] x: ;
call symput('array_length',cats(dim(vars)));
run;
data want;
length logx1-logx&array_length. 8;
set have;
array vars[*] x: ;
array logvars[*] logx1-logx&array_length.;
do j=1 to dim(vars);
logvars[j]=log(vars[j]);
end;
run;