我正在编写一个代码来显示包含proc报告的以下记录。我想用红色突出显示每行的最大数量。我尝试过代码但突出显示了不同的值。请在以下代码中提供更正,以显示正确突出显示的值。
data records;
input a1 a2 a3 a4 a5;
cards;
37 95 80 52 85
94 . 7 10 14
64 5 71 14 92
. 55 38 . 46
;
run;
proc report data=records nowd;
column a1 a2 a3 a4 a5;
define a1/display;
define a2/display;
define a3/display;
define a4/display;
define a5/display;
compute a1;
if a1=Max(a1,a2,a3,a4,a5) then call define('a1','style','style={foreground=white background=red}');
endcomp;
compute a2;
if a2=Max(a1,a2,a3,a4,a5) then call define('a2','style','style={foreground=white background=red}');
endcomp;
compute a3;
if a3=max(a1,a2,a3,a4,a5) then call define('a3','style','style={foreground=white background=red}');
endcomp;
compute a4;
if a4=max(a1,a2,a3,a4,a5) then call define('a4','style','style={foreground=white background=red}');
endcomp;
compute a5;
if a5=max(a1,a2,a3,a4,a5) then call define('a5','style','style={foreground=white background=red}');
endcomp;
run;
答案 0 :(得分:2)
据我所知,如果你使用计算声明,顺序很重要。因此,如果你使用计算a1,那时只有a1有一个值,计算a2意味着只有a1和a2有一个值,依此类推......
因此,您必须将最后一列用于计算语句,然后所有列都有值,结果应该没问题。
在Sas page上找到了这个:
注意:计算变量的位置很重要。 PROC REPORT从左到右为报表的行中的列分配值。因此,您不能将计算变量的计算基于报表
中右侧出现的任何变量
所以试试这种方式,它对我有用:
proc report data=records nowd;
column a1 a2 a3 a4 a5;
define a1/display;
define a2/display;
define a3/display;
define a4/display;
define a5/display;
compute a5;
if a1=Max(a1,a2,a3,a4,a5) then call define('a1','style','style={foreground=white background=red}');
if a2=Max(a1,a2,a3,a4,a5) then call define('a2','style','style={foreground=white background=red}');
if a3=max(a1,a2,a3,a4,a5) then call define('a3','style','style={foreground=white background=red}');
if a4=max(a1,a2,a3,a4,a5) then call define('a4','style','style={foreground=white background=red}');
if a5=max(a1,a2,a3,a4,a5) then call define('a5','style','style={foreground=white background=red}');
endcomp;
run;