我有以下数据集:
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号码拉入了一个macrolist id=(10,22,13,64)
,所以可以尝试使用类似的东西来命名。
想法?感谢。
答案 0 :(得分:2)
我认为您需要确定数组的长度才能声明结果数组。幸运的是,您可以将其加载到具有短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;