数据步骤中的SAS阵列DO循环计算

时间:2014-10-15 13:57:16

标签: arrays sas do-loops

我有以下数据集:

data have;
    input x10 x22 x13 x64;
cards;
20 10 30 1
;
run;

我想创建四个名为log_x10log_x22log_x13log_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),所以可以尝试使用类似的东西来命名。

想法?感谢。

1 个答案:

答案 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;