动态划分多列 [英] Dividing multiple columns dynamically

查看:11
本文介绍了动态划分多列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含415列的数据集。15个是计算的指标,另外400个是我要计算的指标的分子和分母。这400个变量都具有相同的格式,即*variable-name*_NUM*variable-name*_DEN。例如,我想从A_NUMA_DEN计算A = divide(A_NUM, A_DEN)。换句话说,从最初的415列中,我希望我的数据集中有15个(已经计算出的指标)+200(400/2)个指标。

目前我手动计算如下:

data want;
    set have;

    a = divide(a_NUM,a_DEN);
    b = divide(b_NUM,b_DEN);
    c = divide(c_NUM,c_DEN);
    ...
    y = divide(y_NUM,y_DEN);
    z = divide(z_NUM,z_DEN);
    ...
run;

但我相信有一种动态的方法可以做到这一点(也许使用数组?)。

推荐答案

data want;
set have;

array _num (*) num_:;
array _den (*) den_:;
array _results(*) results1-results200;

do i=1 to dim(_num);
  _results(i) = _num(i)/_den(i);
 end;

run;

另一种选择可能是将您的数据转置为长结构,以便您在一列中有分子,在另一列中有分母,然后轻松计算。

data long;
set have;
array _num (*) num_:;
array _den (*) den_:;


do i=1 to dim(_num);
numerator = _num(i);
denominator = _den(i);
var_num = scan(vname(_num(i)), 2, "_");
var_den = scan(vname(_den(i)), 2, "_");
output;
end;

run;

    data want;
    set have;
    length flag $8.;
    ratio = numerator/denominator;
    if var_num ne var_den then flag = "CHECKME";
    run;

    proc transpose data=want out=wide prefix=ratio_;
    by someUniqueVariable;
    id var_num ;
    var ratio;
    run;

这篇关于动态划分多列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆