我想为每个year
和revtype
找到最佳收入。如图所示,如果月apr
的销售额最高,则apr
将列在best_sale
列下。如果有两个月具有相同的最高值,那么我希望它们都在best_sale
列中。
data year;
set similar;
array k(*) jan--dec;
do i=1 to dim(k);
do j=i to dim(k);
if k(i)=max(of k(*)) then best_sale=vname(k(i));
if best_sale=vname(k(j)) then output year;
end;
end;
drop i j;
run;
proc sort data=year nodup out=y;
by year;
run;
data best;
length cat $100.;
do until (last.year);
set y;
by year;
cat=catx(',',cat,best_sale);
end;
drop best_sale;
run;
当我运行上述代码时,它不会考虑revtype
,因为do until
循环仅针对year
运行。但我希望每年最好的销售 revtypes,“货物”和“乘客”。
答案 0 :(得分:0)
关于从数组中获取两个最大值,请尝试ordinal
函数:
data year;
set similar;
array k(*) jan--dec;
do i = 1 to dim(k);
do j = 0 to 1;
if k[i] = ordinal(dim(k) - j, of k[*]) then do;
best_sale = vname(k[i]);
output year;
end;
end;
end;
run;
答案 1 :(得分:0)
我不确定我是否了解整个图片,但此代码可能会让您更进一步。如果这不是您想要的输出,请提供其他详细信息。 (不确定您是否希望在最后一步中将最佳销售数据显示在多行上,以及您的similar
数据集中是否有多个条目具有相同的year
和revtype
- 在这种情况下,提供更完整的样本数据集将证明是有用的。)
data have;
informat year 8. revtype $24. jan feb mar apr may jun jul aug sep oct nov dec 8.;
input year revtype jan--dec;
datalines;
1997 cargo 100 50 125 200 . . . . . . . . .
1997 passenger 200 256 235 256 . . . . . . . .
1998 cargo 300 111 435 109 . . . . . . . .
;
data want;
set have;
format max_sales 8. best_months $24.;
array month(12) jan--dec;
max_sales = max(of month(*));
do _i = 1 to 12;
if month(_i) = max_sales then
best_months = catx(",", best_months, vname(month(_i)));
end;
drop max_sales _i;
run;