问题描述
我有按帐户级别划分的行数据,我希望按帐户所有者将其分组为新数据。是,将优先。
Account_Owner Account_No Ever_Purchase Ever_Purchase_within_2days Ever_Deliver_in_2weeks
Tom 12345 Yes Yes No
Tom 34567 Yes No Yes
Tom 09876 No No No
Desired Outcome
Account_Owner Ever_Purchase Ever_Purchase_within_2days Ever_Deliver_in_2weeks
Tom Yes Yes Yes
很抱歉,我没有任何代码,因为我不知道从哪里开始。
解决方法
您可以使用DOW循环来跟踪临时数组中每个ever_*
变量的分组结果。
proc format;
value yesno .,0 = 'No' other='Yes';
data have; input
Account_Owner $ Account_No Ever_Purchase $ Ever_Purchase_within_2days $ Ever_Deliver_in_2weeks $;
datalines;
Tom 12345 Yes Yes No
Tom 34567 Yes No Yes
Tom 09876 No No No
;
data want;
array evals(100) _temporary_; * presume never more than 100 flag variables;
call missing (of evals(*));
* dow loop;
do until (last.account_owner);
set have;
by account_owner;
array flags ever:;
do _n_ = 1 to dim(flags);
evals(_n_) = evals(_n_) or flags(_n_) = 'Yes'; * compute aggregate result;
end;
end;
* move results back into original variables;
do _n_ = 1 to dim(flags);
flags(_n_) = put(evals(_n_),yesno.);
end;
* implicit output,one row per group combination;
run;
注意:在另一种解决方案中,您可以将Yes / No转换为数字1/0,可以使用Proc Summary或Proc MEANS计算组结果(如果是,则var的最大值为1,如果全部为否,则var的最大值为0)