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;