在SAS中使用变量名进行计算

itz*_*tzy 1 sas

我有一个SAS数据集,如下所示:

var  _12  _41  _17
12      .   .   .
41      .   .   .
17      .   .   .
Run Code Online (Sandbox Code Playgroud)

所以每个var都有一个名为的列_var.

我想使用数组或宏来使用行和列的乘积填充所有缺少的值:

     _12  _41  _17
12  144   492  204
41  492  1681  697
17  204   697  289
Run Code Online (Sandbox Code Playgroud)

有关如何处理此问题的任何想法?我希望它完全是通用的,所以我不需要知道列的名称,也不需要对它们的顺序或值做任何假设,除了它们都是数字.

Lon*_*ish 5

由于所有变量(除var之外)都以下划线开头,因此很容易在数组中引用它们.然后,您可以使用INPUT,COMPRESS和VNAME函数提取数字并在一行中执行计算!这是代码.

    data have;
    input var  _12  _41  _17;
    cards;
    12  .   .   .
    41  .   .   .
    17  .   .   .
    ;
    run;

    data want;
    set have;
    array nums{*} _: ;
    do i=1 to dim(nums);
        nums{i}=var*input(compress(vname(nums{i}),"_"),best12.);
    end;
    drop i;
    run;
Run Code Online (Sandbox Code Playgroud)