我有一个由格式化数字变量组成的数据集(DIN)(例如,第1列“ BLD”的值为1-3,但它们的格式为“是”,“否”,“未知”)。所有列的格式略有不同。
在每一行中,只有一列具有值,其余列均缺失。我正在尝试使用以下内容来获取每一行的最大值(它将始终是非缺失值)
data DIN;
set DIN;
MAX = max(of BLD--VASC);
run;
不幸的是,由于这些列是数字,因此MAX
列显示为数字,而不是格式值。我尝试使用vvalue
来获取格式化值,如下所示,但我不知道如何一次对所有列进行格式化。
data _null_;
set DIN;
BLD_C = vvalue(BLD);
run;
我觉得do
循环可能会有所帮助,我尝试循环遍历变量名数组,但这是行不通的。似乎什么都没发生
data DIN_C;
set DIN;
array nums(*) _numeric_;
do i = 1 to dim(nums);
nums_C = vvalue(nums(i));
end;
run;
有人可以帮助我吗?还是我可以针对这个问题采取另一种方法?
答案 0 :(得分:2)
您可以使用MAX()查找实际的不丢失数字值。然后使用WHICH()查找具有该值的变量的索引号。现在,您可以使用VVALUE()查找该变量的格式化值。
data DIN_FIXED;
set DIN;
array _num BLD--VASC
length max 8 max_formatted $50 ;
MAX = max(of _num[*]);
if not missing(max) then max_formatted=vvalue(_num[which(max,of _num[*])]);
run;