gpt4 book ai didi

sas - 动态划分多列

转载 作者:行者123 更新时间:2023-12-02 02:18:21 24 4
gpt4 key购买 nike

我有一个包含 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;

关于sas - 动态划分多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66822296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com