sas - 动态划分多列
问题描述
我有一个包含 415 列的数据集。15 个是计算指标,另外 400 个是我要计算的指标的分子和分母。400 个变量都具有相同的格式,即*variable-name*_NUM
和*variable-name*_DEN
. 例如,从A_NUM
和A_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;
推荐阅读
- excel - Excel - 基于特定文本值的超链接到另一个工作表
- javascript - 加强 JavaScript 劫持:使用 Jquery Ajax 的易受攻击的框架 aspx
- windows - 如何在 WiX 的单独组件中注册文件关联
- javascript - 仅在使用 HOC 时查询组件中的元素类型错误
- javascript - 为什么我无法获得由 id 属性标识的这个元素?
- fiddler - Fiddler AutoResponder 是否与 SOAP api 兼容?
- c# - 检索对象 [使用 Dapper 的存储过程]
- flutter - 在顶部添加新项目时在 ListView 中保持滚动位置
- nginx - VideoJS中从多个FFMPEG到RTMP命令的HLS流不断重复片段
- python - 在混乱的能源数据中寻找层次结构