2

我有以下数据集:

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

我想创建四个名为log_x10, log_x22,的新列log_x13log_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),因此可以尝试使用类似的名称来命名。

想法?谢谢。

4

1 回答 1

2

我认为您需要确定数组的长度才能声明结果数组。幸运的是,您可以使用短数据步将其加载到宏变量中。

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;
于 2014-10-15T14:45:15.270 回答